2012-12-24 106 views
1

我有一個簡單的查詢,它需要大約7-8秒才能從數據庫中檢索我想進一步精調到2-3秒的數據。查詢微調

表:

UpdateDateTime | field1 | field2 |..... FieldN. 

查詢:

Select * 
from Table with (nolock) 
where UpdateDateTime Between D1 and D2 
Order By UpdateDateTIme 

我創建聚簇索引UpdateDateTime

可以做些什麼進一步提高效率?

+0

這取決於很多很多東西。你的服務器裝備精良嗎?你是通過互聯網運行查詢嗎? –

回答

3

減少返回的列數是顯而易見的答案,然後在UpdateDateTImeINCLUDE其他選定列上創建一個覆蓋(非聚集)索引。

CREATE NONCLUSTERED INDEX NC_MyCoveringIndex 
    ON Table(UpdateDateTime) 
     INCLUDE (Col1, Col2, ..., ColN) 

Ref

[注意:這不是理想的創建包括表中的所有列寬覆蓋索引]

在很大程度上取決於你的WHERE條款如何選擇是。如果它返回(近似)大於表中行數的10%,那麼優化器可能只是掃描聚集索引。

就是這樣。除此之外,你需要看看你的硬件,以及你通過線路傳輸多少數據。

+0

但我需要所有的領域。你能告訴我如何創建覆蓋索引,是不是: 創建索引<>在<>包含() – srid99

+0

你不應該創建一個覆蓋索引真正的所有列。不理想。但是,這是語法。 –