考慮以下三個查詢:爲什麼在SELECT子句中使用非索引字段時性能下降?
select sampleno from sample
where markupdate > '1/1/2010'
select sampleno, markupdate from sample
where markupdate > '1/1/2010'
select sampleno, markuptime from sample
where markupdate > '1/1/2010'
sampleno
和markupdate
被索引字段(sampleno
是主鍵)
markuptime
不是索引
查詢1和2需要約1秒到運行(返回237K行)。 3分鐘後,查詢3仍在運行。
爲什麼在SELECT子句中包含非索引字段會導致性能下降?
這是一個SQL 6.5數據庫。
有什麼我可以做的查詢臨時包括markuptime在索引或必須創建包含markuptime表的索引? – blueshift 2013-02-08 17:04:04
您可以添加INCLUDE以在MarkUpdate的非聚集索引中包含MarkupTime,這將爲您提供第三個查詢的「覆蓋索引」。 (Nevermind,如果你有更新版本的SQL,你可以這樣做......我想只需在MarkUpdate索引中添加MarkupTime作爲另一列。) – 2013-02-08 17:04:52