Sql-Server

查詢執行時間是隨機的,需要查明根本原因

  • March 25, 2019

我有一個如下查詢

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)

這本書我已經讀了很多頁,我推薦給你。

SQL Server 中的專家性能索引

這裡的另一個也很好。

SQL Server 2017 查詢性能調整:疑難解答和優化查詢

您應該做的第一件事是創建一個新索引。該索引將用於此特定查詢並幫助支持表上的外鍵。

create index IDX_table1_column2_column3 on table1 ( column2, column3 )

引用自:https://dba.stackexchange.com/questions/217350