优化器能够将范围扫描访问方法应用于此表单的查询:
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()断言的右侧,必须有多个行构造函数。
有关优化程序和行构造函数的更多信息,参见后续文章“行构造函数表达式优化”
网友评论