Sql-Server

為什麼一個查詢的參數返回與不同參數相同的結果#,速度非常慢

  • November 1, 2016

我是一名應用程序開發人員,從以前的開發人員那裡繼承了 SQL 數據庫。有一種觀點導致了問題。這個視圖從不同的表中選擇了一堆不同的列,並包含 6 個不同的內部連接。我在這個視圖上執行一個查詢,像這樣……

SELECT * FROM dbo.View where UserID = " + employeeId + "

當我對所有不同的員工執行此查詢時,它會在幾秒鐘內返回正常。然而,對於一名員工來說,即使結果集的數量和 API 中的超時時間幾乎相同,也需要一兩分鐘。我已將原因縮小到其中一個聯接表,這是有道理的,因為該聯接表具有最多的行並建立了很多連接。我不知道如何進一步診斷問題。

我試過的:

  • 創建與導致問題的表相同的表,複製相同的數據,但使用新的聚集索引。我更改為的聚集索引列是視圖在連接中使用的列。這沒有幫助。我需要做一些“執行集群並排序”或類似的事情嗎?

你們中的一個人將如何進行進一步的診斷?

更改之前聚集索引首先在哪裡(它是標識列)?

如果是這樣,請保持原樣並在您用於連接的列上創建一個非聚集索引並嘗試。

查看執行計劃。

SQL Server 將根據預期返回的不同行數建構不同的執行計劃。(即使可能返回的實際行數可能相同,但實際可能不同。)

要獲取 SSMS 中的實際執行計劃,請點擊查詢、包括實際計劃。然後你可以比較不同的計劃,看看它們是否有不同的形狀。

如果您使用的是 SQL Server Management Studio 2016,則可以使用比較 Showplan 功能來簡化操作。(它甚至適用於查詢 2008 框。)

如果您可以公開共享執行計劃,請使用PasteThePlan.com上傳兩個不同的執行計劃,然後人們可以指出它們之間的不同之處。(請注意,此工具是完全公開的 - 每個人都會看到您的查詢的全文和您的參數。)

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