最近では、一番左のマッチング原則SQL Serverインデックスの話を何人かの友人は、条件は交換基に、これは誤解であるT-SQLで順番を書い問題として理解しました。
以下の実験結果の下に見えます。
図1は 、データを準備します。
[DBO]テーブルを作成します。[T6](
[ID] [INT] IDENTITY(1,1)NOT NULL、
[時間] [INT] NULL、
[注文番号] [INT] NULL、
[PRIMARY]に対する制約[PK_t6] PRIMARY KEY CLUSTERED([ID] ASC)
)ON [PRIMARY]
GO
t6の値(デフォルト、デフォルト)に挿入
- レコードの10 + Mを生成し、次のステートメントを繰り返し
T6に挿入するIDを選択し、T6から時間
更新T6セット
時間= IDの%の変換(INT、300000 * RAND()+ 2)、ORDERNUMBER = IDの%の変換(INT、3000 * RAND()+ 2)
2 、インデックス1を作成します。http://u48582907.b2bname.com/
T6のインデックスfhsy1を作成する(時間、注文番号)
図3は 、2つのフィールドが同等のクエリ実行プランです参照してください。
時間を選択し、注文番号T6どこから時間= 1、注文番号= 1
時間を選択し、注文番号T6からどこ注文番号= 1、時間= 1
4 、インデックス2を作成します。
create index fhsy1 on t6(ordernumber, hour)
5 、再次查看执行计划。
6 、再看一下一个字段为等值,另一个字段为范围查询的执行计划。
select hour,ordernumber from t6 where hour=1 and ordernumber between 1 and 2
select hour,ordernumber from t6 where ordernumber between 1 and 2 and hour=1
select hour,ordernumber from t6 where ordernumber=1 and hour between 1 and 2
select hour,ordernumber from t6 where hour between 1 and 2 and ordernumber=1
结论
1 、索引的最左匹配,是指的检索条件与索引字段的关系,与在T-SQL语句中Where条件中的书写顺序无关。
索引与搜索条件的书写顺序有关,这在上世纪可能还有可能;现在的数据库引擎的智能化程序,应该可以通过智能优化或语句改写,实现顺序无关。这一点都做不到,这个数据库离淘汰就不远了。郑州不孕不育医院:http://yyk.39.net/zz3/zonghe/1d427.html
2 、从Cost来看,索引总是匹配等值检索字段在前的复合索引,这就是被称为 最左匹配原则 的原因。
3 、左端マッチングインデックス実行プランは、インデックス/その後、変化する条件により範囲を走査し、同等の状態で位置決めされるスキャン、シークです。一般的には、この計画の実施は、優れたインデックススキャン、つまり、全体のインデックススキャンです。
疑い
同等のクエリでは、CBOは、自動的に未知の理由のための最終的な実行計画の選択インデックスインデックス2の代わりの1に相当最小実行計画原価、インデックス1とインデックス2を選択します。そして、木の高さは、統計情報をインデックス化する必要があります。原因不明の。