MySQL5.7性能优化(八)行构造函数表达式的范围优化

优化器能够将范围扫描访问方法应用于此表单的查询:

SELECT ... FROM t1 WHERE ( col_1, col_2 ) IN (( 'a', 'b' ), ( 'c', 'd' ));

以前,要使用范围扫描,必须将查询编写为一下的格式:

 SELECT ... FROM t1 WHERE ( col_1 = 'a' AND col_2 = 'b' )
OR ( col_1 = 'c' AND col_2 = 'd' );

为了让优化器使用范围扫描,查询必须满足以下条件:

  • 只能使用IN()进行断言,不能使用NOT IN()。
  • 在IN()断言的左侧,行构造函数只能包含列的引用。
  • 在IN()断言的右侧,行构造函数只能包含运行常量,这些常量是在执行期间绑定到常量的文本或本地列引用。
  • 在IN()断言的右侧,必须有多个行构造函数。
    有关优化程序和行构造函数的更多信息,参见后续文章“行构造函数表达式优化”

回到综述页

你可能感兴趣的:(MySQL5.7性能优化(八)行构造函数表达式的范围优化)