私はAdventureWorks2012データベースを使用しています。
Sales.SalesOrderHeader
テーブルに次のインデックスを作成しました
create index i1 on
sales.salesorderheader(purchaseordernumber,salespersonid)
include(orderdate,shipdate)
where purchaseordernumber is not null
and salespersonid is not null
以下のクエリを実行すると:
select
PurchaseOrderNumber,
OrderDate,
ShipDate,
SalesPErsonId
from sales.salesorderheader
where purchaseordernumber like '%po5%' and salespersonid is not null
クエリの一部であるすべての列はすでにインデックスの一部であるため、インデックスはインデックススキャンではなくシークすることを期待しています。
クエリオプティマイザがインデックススキャンがインデックスシークよりも安価であると感じた場合は、インデックススキャンを行うことをどこかで読みました。しかし、なぜこの場合に起こっているのかわかりません。ルックアップはまったくありません。
誰かが私を説明してもらえますか?