我已經被問到以下問題,當您想要改進存儲過程性能時,您會看到什麼?存儲過程返回一些值並在其中有三個連接。 除了確保連接寫得很好之外,還可以做些什麼來使其性能更好?這是一個普遍的問題,沒有提供任何代碼。 任何想法?返回存儲過程的SQL性能
回答
有很多的事情可以做,優化程序,但它聽起來像是你的SQL語句是非常簡單的。有些事情要注意:
- 內聯函數。這些可能會導致SQL按行進行逐行評估並減慢速度
- 連接語句上的數據轉換。這些可以防止索引被使用。
- 確保列被加入了/在where子句中被索引(對於大型數據集)
您可以檢查出這個網站獲取更多性能的技巧,但我想我介紹你最需要什麼簡單的語句:
檢查連接中使用的表上的索引。特別是,連接索引中使用了哪些列?
示例 -
SELECT *
FROM SomeTable a
JOIN SomeOtherTable b on a.ItemId = b.ItemId
如果這些表很大,索引ItemId
兩個表中通常會有助於性能提升不少。
如果您的查詢有一個,您應該對WHERE
子句中使用的任何列執行相同的操作。
WHERE a.ProductId = @SomeVariableYouPassedToTheStoredProc
索引ProductId
可能有助於在這種情況下。
查詢性能是你可以進入兔子洞的東西,但這是一個合理的(快速)開始的地方。
感謝指數,比我通常不能想其他任何事,他們都是查詢具體,如使用TINYINT而不是INT等等,是不是? – sheidaei 2012-08-17 14:52:41
事實上,它是一個存儲過程與它沒有多大關係。優化裏面的sql。
至於如何,所有常見的嫌疑犯,包括由那種認爲你可以猜測出什麼問題的eejit寫的。
將proc中的sql複製到一個合適的工具中,並用Explain作爲前綴以查看發生了什麼。
所以它與返回值無關,對吧?你正在談論存儲過程本身的sql。 – sheidaei 2012-08-17 14:53:30
是的,以及它裏面的SQL。實質上,所有的存儲過程都是一個已命名和預編譯的sql塊,其中包含一些用於傳入和傳出值的修飾。 – 2012-08-17 15:40:23
我認爲還有其他的選擇。例如: 1.這些連接中的每一個都可以使用類似'and permited_used_name =(從user_list where選擇user_name)'的限制條件。該值可以在過程啓動過程中(我的意思是第一個過程字符串)派生一次,以避免許多類似查詢超載數據庫。 2.從Oracle11開始,您可以使用緩存結果將函數聲明爲函數(即函數計算一次,每次調用時都不重新計算),定義一組更改無效緩存的表。
在任何情況下,這個問題主要是針對數據庫的。
有關Oracle11中的緩存很好的知識,你能否把我推薦給在線的好例子? – sheidaei 2012-08-17 14:51:18
- 1. 返回存儲過程的結果sql
- 2. 的SQL Server存儲過程的性能
- 3. 存儲過程的性能選擇SQL
- 4. 性能的LINQ VS SQL存儲過程
- 5. SQL-CLR存儲過程不返回值
- 6. SQL存儲過程無法返回值
- 7. SQL Server存儲過程城市返回
- 8. T-SQL存儲過程返回表
- 9. SQL Server存儲過程性能問題
- 10. SQL Server - 存儲過程查詢性能
- 11. SQL Server - 存儲過程性能問題
- 12. 存儲過程返回varchar
- 13. 存儲過程返回null
- 14. 存儲過程返回NULLS
- 15. 存儲過程返回值
- 16. 返回存儲過程值
- 17. 返回BIGINT存儲過程
- 18. 存儲過程返回varchar
- 19. MS SQL:抑制存儲過程中調用的存儲過程的返回值
- 20. SQL Server存儲過程存儲返回值
- 21. 從SQL Server存儲過程獲得空結果存儲過程,返回XML
- 22. 我的存儲過程的返回值
- 23. SQL Server存儲過程在T-SQL中捕獲返回值
- 24. 需要存儲過程的返回值
- 25. PHP返回存儲過程的輸出
- 26. 存儲過程中的返回值MYSQL
- 27. 存儲過程中的返回計數
- 28. 存儲過程返回錯誤的值
- 29. 返回特定行的存儲過程
- 30. 存儲過程的返回值
內聯函數與遊標不同吧?遊標也在逐行編譯。感謝您的網站,這是一個很好的來源 – sheidaei 2012-08-17 14:49:37
正確的,遊標是循環數據的一種方式。內聯函數只是在查詢中計算數據的方法。如果您使用函數來計算where子句中的數據,然後將該計算與另一個值進行比較,那麼很可能SQL不會使用索引,並且它可能必須一次一行地執行計算/比較,而不是按質量進行計算/比較。 – 2012-08-17 22:27:05