[問題記錄] 執行計劃無法正常引用 Index

當 execution plan 無法正常引用 index 時還能檢查哪裡?

這次遇到一個神奇的小問題,就像哈利波特之消失的密室一樣神奇

趕快記錄一下以免人老忘記了 (以下是模擬畫面)

事情是這樣的~同事 A 君在檢查一個怪問題,問我:

「有兩個資料庫有相同 schema 的資料表,相同的 index,執行相同的查詢語法 (除了資料量不同以外)

 但 execution plan 呈現出來的結果卻不同,A 是 index seek 而 B 竟是 index scan 這是什麼巫術?」

原以為是資料量少所以執行計劃用 index scan 比較快,為了證明所說不假,於是將 TestDB1 該表清空

然後將 TestDB2 同表資料匯入後筆數一致了,但結果並不是我所想的那麼簡單

為何 TestDB1 你如此任性!

突然間想起了一個很重要的環節沒檢查到,於是立馬查看

SELECT name, collation_name FROM sys.databases WHERE name IN ('TestDB1', 'TestDB2');

動手建立一個新的 TestDB3 並且跟 TestDB2 相同 collation

USE master;  
GO   
CREATE DATABASE TestDB3 COLLATE Latin1_General_CI_AI;  
GO  

從 TestDB1 產出 create table 及 index script 到 TestDB3 建立

並將 TestDB1 該表的資料匯入到 TestDB3 再次執行相同語法

Bingo!終於找到 TestDB1 任性的原因~

have fun ʕ•͡ᴥ•ʔ