Sql-Server
查詢執行時間是隨機的,需要查明根本原因
我有一個如下查詢
select * from table1 where column2=123 and column3='B'
現在我們面臨的問題是,這個查詢有時執行得很慢,正如我們的性能跟踪工具所見。同樣根據我們應用程序的知識,我們知道它一天執行 100 次,但我們只看到它每天被報告為慢 2-3 次。
當我在 SQL Server Management Studio 中執行它時,它會在幾乎 200 毫秒內持續執行。
我需要知道的是,這種隨機緩慢的原因是什麼?辨識/修復根本原因的策略可能是什麼?
另外,請注意該表只有 3 列。
- Column1 - 主鍵,(整數)
- Column2 - 外鍵,(整數)
- Column3 - 值,varchar(10)
評論中詢問的其他重要資訊。
- 表上的索引 - 沒有索引
- 此表的統計資訊是否已更新?- 不,怎麼做?
- 查詢是否有可能被某些數據更改或數據載入阻塞?- 有可能在執行此查詢的同時執行編輯腳本,但更新腳本不會更新同一行。
- 該數據庫中使用的事務隔離級別是什麼?- 閱讀未送出。
通常,主鍵約束會在表中創建聚集索引。重要的是在表中至少有一個索引以避免全掃描。
正如您所說,該表沒有任何類型的索引,但是您正在使用具有兩列的謂詞在表中進行搜尋。根據我的經驗,我將創建一個非聚集索引來支持此查詢。還有另一件重要的事情,您應該在語句 select 中包含您正在使用的所有列。包含列不是索引中的關鍵列,所以要小心。
CREATE INDEX idx ON MyTable (column2 ,column3) INCLUDE (Name, Address)
這本書我已經讀了很多頁,我推薦給你。
這裡的另一個也很好。
您應該做的第一件事是創建一個新索引。該索引將用於此特定查詢並幫助支持表上的外鍵。
create index IDX_table1_column2_column3 on table1 ( column2, column3 )