我有一個表格ORDER
有64列,OrderNo
是主鍵。它還有兩列ParentOrderNo
和Type
。對於單獨的訂單,Type和ParentOrderNo
將爲NULL,對於分組訂單,Type
將填充「PRNT」或「CHLD」。 OrderNo where Type='PRNT'
將填充到組的所有訂單(PRNT和CHLD)的ParentOrderNo
列。一個組可以有1個父母和2個或更多的子訂單。該表具有用於列ParentOrderNo
和Type
的非聚集索引(IX_ORDER_1)。索引查找對索引掃描的變化在where子句中的值變化
此表中共有31654行。在我的測試案例中,有30001個訂單(1個父母和30000個孩子)。
當我執行查詢:
Select top 1 *
From ORDER
where PARENTORDERNO = '11278' and Type ='prnt'
執行計劃顯示索引查找使用(IX_ORDER_1)
但是當我執行查詢:
Select top 1 *
From ORDER
where PARENTORDERNO = '11278' and Type ='chld'
執行計劃顯示索引掃描使用聚集索引
有人可以指導我什麼導致這種變化執行計劃。 在此先感謝
什麼時候掃描比搜索更有效率?如何? – user7592627