Sql-Server
為什麼一個查詢的參數返回與不同參數相同的結果#,速度非常慢
我是一名應用程序開發人員,從以前的開發人員那裡繼承了 SQL 數據庫。有一種觀點導致了問題。這個視圖從不同的表中選擇了一堆不同的列,並包含 6 個不同的內部連接。我在這個視圖上執行一個查詢,像這樣……
SELECT * FROM dbo.View where UserID = " + employeeId + "
當我對所有不同的員工執行此查詢時,它會在幾秒鐘內返回正常。然而,對於一名員工來說,即使結果集的數量和 API 中的超時時間幾乎相同,也需要一兩分鐘。我已將原因縮小到其中一個聯接表,這是有道理的,因為該聯接表具有最多的行並建立了很多連接。我不知道如何進一步診斷問題。
我試過的:
- 創建與導致問題的表相同的表,複製相同的數據,但使用新的聚集索引。我更改為的聚集索引列是視圖在連接中使用的列。這沒有幫助。我需要做一些“執行集群並排序”或類似的事情嗎?
你們中的一個人將如何進行進一步的診斷?
更改之前聚集索引首先在哪裡(它是標識列)?
如果是這樣,請保持原樣並在您用於連接的列上創建一個非聚集索引並嘗試。
查看執行計劃。
SQL Server 將根據預期返回的不同行數建構不同的執行計劃。(即使可能返回的實際行數可能相同,但實際可能不同。)
要獲取 SSMS 中的實際執行計劃,請點擊查詢、包括實際計劃。然後你可以比較不同的計劃,看看它們是否有不同的形狀。
如果您使用的是 SQL Server Management Studio 2016,則可以使用比較 Showplan 功能來簡化操作。(它甚至適用於查詢 2008 框。)
如果您可以公開共享執行計劃,請使用PasteThePlan.com上傳兩個不同的執行計劃,然後人們可以指出它們之間的不同之處。(請注意,此工具是完全公開的 - 每個人都會看到您的查詢的全文和您的參數。)