優(yōu)化器能夠?qū)⒎秶鷴呙柙L問方法應(yīng)用于此表單的查詢:
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' );
為了讓優(yōu)化器使用范圍掃描饰恕,查詢必須滿足以下條件:
- 只能使用IN()進(jìn)行斷言林艘,不能使用NOT IN()。
- 在IN()斷言的左側(cè)宪塔,行構(gòu)造函數(shù)只能包含列的引用磁奖。
- 在IN()斷言的右側(cè),行構(gòu)造函數(shù)只能包含運(yùn)行常量某筐,這些常量是在執(zhí)行期間綁定到常量的文本或本地列引用比搭。
- 在IN()斷言的右側(cè),必須有多個(gè)行構(gòu)造函數(shù)南誊。
有關(guān)優(yōu)化程序和行構(gòu)造函數(shù)的更多信息身诺,參見后續(xù)文章“行構(gòu)造函數(shù)表達(dá)式優(yōu)化”