select * from Production.Product where Name like 'M%'
select * from Production.Product where CHARINDEX('M', Name) > 0
select * from Production.Product where Name like 'ML C%'
select * from Production.Product where CHARINDEX('ML C', Name) > 0
- Step 3. 查詢結果
- 查詢 1, 2:當只有查詢 1 個字元 LIKE 與 CHARINDEX,所查詢成本是一樣
- 查詢 3, 4:當提高準確度的 LIKE 查詢,速度快於 CHARINDEX
select * from Production.Product where Name like 'M%'
select * from Production.Product where Name like 'ML C%'
select * from Production.Product with (index(AK_Product_Name))
where Name like 'M%'
- Step 4. 查詢結果
- "索引搜尋"的相對總查詢成本 (相對於批次 x 索引搜尋成本),如下:
- 查詢 1:16% x 100% = 16%
- 查詢 2:9% x 46%= 4.14%
- 查詢 3:75% x 6% = 4.50%
- 查詢 1, 2:查詢 2 的 LIKE 中得到更多的資料,使在相對查詢成本較快
- 查詢 1, 3:因多 "索引間查閱"會耗掉相對總查詢成本 70.5 % (75% x 94%),使得整體成本變高
select * from Production.Product with (index(AK_Product_Name))
where Name like 'M%'
select * from Production.Product with (index(AK_Product_Name))
where Name like '%M%'
select * from Production.Product with (index(AK_Product_Name))
where Name not like 'M%'
- Step 6. 查詢結果
- 查詢 1 (索引搜尋):24% x 6% = 1.44%
- 查詢 2 (索引掃描):32% x 8%= 2.56%
- 查詢 3 (索引掃描):45% x 5% = 2.25%
- Result:
- 高準確度的 LIKE 查詢,速度快於 CHARINDEX
- 如 LIKE 的第 1 個字元為明確有資料 (like 'M%'),才能使用 "索引搜尋",否則只能使用 "索引掃描"
- 強制使用 "資料表提示" (with (index(AK_Product_Name))) 來指定所要使用的 "索引" 未必比較好
- REF:
沒有留言:
張貼留言