上下文:SQL Server 2008.內部連接有2個表。 擁有4000萬行的事實表包含患者密鑰和所服用的藥物以及其他事實。藥物密鑰和患者密鑰在該順序中有一個獨特的索引(非聚集)。 維度表是藥物清單(70行)。 加入是基於藥物密鑰(代理鍵)獲得藥物代碼(商業代碼)。 查詢:SQL Server查詢的奇怪執行計劃
SELECT a.PKey, a.SomeFact, b.MCode
FROM tblFact a
JOIN tblDIM b ON a.MKey = b.MKey
所有返回的列是整數。 上述查詢在7分鐘內運行,其執行計劃顯示使用(MKey,PKey)上的索引。該指數在運行前重建。 當我禁用事實表上的索引(或將數據複製到具有相同結構但沒有索引的新表)時,相同的查詢僅需要1:40分鐘。
IO統計數據也令人驚歎。
有索引:表'tblFACT'。掃描計數70,邏輯讀取190296338,物理讀取685138,預讀讀取98713
沒有索引:表'tblFACT_copy'。掃描計數17,邏輯讀取468891,物理讀取0,預讀讀取419768
問題:爲什麼它會嘗試使用索引並降低效率低下的路徑?
我們可以看到索引定義和執行計劃嗎?它是否必須對您的索引執行RID_LOOKUP? –