2010-04-19 20 views
0

當我打電話:如何在t-sql中使用完全限定名稱優化查詢?

select * from Database.dbo.Table where NAME = 'cat' 

這需要:

200毫秒

當我Management Studio中更改數據庫的數據庫,並調用它不完全合格的名稱它的速度更快:

select * from Table where NAME = 'cat' 

需要:

17毫秒

有沒有什麼辦法,使完全合格的查詢速度更快,而不改變數據庫?

+0

這可能是由不正確緩存的查詢計劃造成的......或者與創建新查詢計劃相關的開銷造成的...... – 2010-04-19 10:56:35

+0

請參閱Remus的答案:http://stackoverflow.com/questions/1112374/sql-服務器性能和完全限定表名 – 2010-04-19 10:58:15

+0

@Mitch小麥謝謝你,我已經看到了這個答案,但每次查詢我的數據庫時都有相同的時間 – 2010-04-19 11:51:40

回答

1

它發生的解決辦法是將此數據庫上的自動關閉更改爲false。

+0

現在已關閉? – gbn 2010-05-02 12:14:51

+1

@gbn是的,它關閉 – 2010-05-05 11:13:52

0

鑑於這兩次是因此不同,它可能只是第二次更快,因爲SQL從第一次運行它時就緩存了查詢計劃。你是不是一個接一個地跑這兩個?即使是沒有任何變化的相同查詢在第二次運行時也會快得多。

如果您想要獲得準確的查詢執行時間,您需要讓SQL忘記它在每次運行後緩存的查詢計劃。我想重新啓動SQL是這樣做的一種方式。

+0

我試過多次執行這些查詢,相反的順序,仍然有相同的結果。第一次執行後沒有任何變化... – 2010-04-19 11:52:56

0

最有可能的區別是因爲工作室打開新的數據庫連接。爲了提供它 - 試着放2個完全限定的sql語句 - 你應該只看到第一個的區別。第二個應運行在相同的連接