我很擅長數據庫(sql)編程部分,但我想進入數據庫優化部分,如:何時何地索引,如何決定哪個查詢比其他更好,如何優化數據庫。你能指導我一些很好的資源或書籍,可以引導我這麼做嗎?好資源學習數據庫優化部分
回答
我最近一直專注於我的公司,並且我學到了一些有關具體查詢優化的有趣事情。
我一次運行SQL Profiler達半小時,並且記錄了需要1000次或更多次的查詢(之後需要50次CPU或更多)。
我最初專注於具有最高讀取和CPU的個別查詢。但是,在將日誌寫入數據庫後,我能夠查詢聚合結果以查看哪些查詢需要最多的聚合讀取和CPU。針對這些實際上幫助的不僅僅是針對最昂貴的查詢。
最昂貴的查詢可能每天運行一次,所以優化它是很好的。但是,如果第10個最昂貴的查詢每小時運行100次,那麼首先對其進行優化會更有幫助。
這裏是我到目前爲止已經學到了總結,它可以幫助你在確定優化查詢開始:
A Beginner's Guide to Database Query Optimization
Highly Inefficient Linq Queries that Break Database Indexing
An Obscure Performance Pitfall for Test Accounts and Improperly Indexed Database Tables
請找數據庫/查詢優化的一些技巧。
應用功能參數,而不是列
一個看數據庫查詢時所看到的最常見的錯誤,就是使用不當的對數據庫表的功能。無論何時我們需要將一個函數應用於某個列並根據某個值驗證結果,都需要檢查我們是否具有可以應用於給定列的反向函數。通過這種方式,數據庫引擎可以對該列使用索引,並且不需要定義基於功能的索引。
針對60行表沒有索引任何,以下查詢
SELECT ticker.SYMBOL,
ticker.TSTAMP,
ticker.PRICE
FROM ticker
WHERE TO_CHAR(ticker.TSTAMP, 'YYYY-MM-DD') = '2011-04-01'
執行0.006s,反之, 「反向」 查詢
SELECT ticker.SYMBOL,
ticker.TSTAMP,
ticker.PRICE
FROM ticker
WHERE
ticker.TSTAMP = TO_DATE('2011-04-01', 'YYYY-MM-DD')
- 在0執行。004S
EXISTS子句,而不是IN(子查詢)
數據庫開發的另一種觀察模式,是人們選擇容易的,最方便的解決方案,併爲這篇文章中,我們將看看在發現一個元素在一個列表中。最簡單和最方便的解決方案是使用IN運算符。
SELECT symbol, tstamp, price
FROM ticker
WHERE price IN (3,4,5);
--or SELECT符號,TSTAMP,價格 FROM股票 WHERE價格IN(SELECT價格從閾WHERE行動= '好');
當我們有一個小的可管理列表時,這種方法是可以的。當列表變得非常龐大並且列表是動態的時候(它將根據我們只有在運行時纔會生成的參數來生成),這種方法對於數據庫而言往往變得非常昂貴。另一種選擇方案是在下面的代碼片段所示使用EXISTS操作的:
SELECT symbol, tstamp, price
FROM ticker t
WHERE EXISTS (SELECT 1 FROM threshold m WHERE t.price = m.price AND m.action = 'Buy');
這種方法會更快,因爲一旦發動機已經找到了打擊,這將退出看上去條件已經證明是正確的。使用IN,它將在進一步處理之前收集子查詢中的所有結果。
- 1. 學習pyqt的好資源?
- 2. 學習數據庫高可用性技術的好資源
- 3. 一個很好的學習資源HTML5
- 4. 良好的學習資源MacRuby
- 5. 學習php調試的好資源
- 6. 什麼是學習XNA的好資源?
- 7. 學習Grails有什麼好的資源?
- 8. 學習json有什麼好的資源?
- 9. 良好的學習資源Orca
- 10. 好的MySQL入門/學習資源
- 11. 良好的學習資源WPF
- 12. LINQ to SQL--最好的學習資源?
- 13. 好的學習資源給Maven 3/Mercury
- 14. 學習元組演算的好資源?
- 15. 良好的學習資源因子
- 16. 學習「實用」OOP的好資源?
- 17. 良好的學習資源JavaScript
- 18. 在.NET中學習WMI的好資源?
- 19. 最好的資源來學習C/C++
- 20. 去學習資源
- 21. 學習資源Verilog
- 22. XRCed學習資源?
- 23. 學習資源Selenium
- 24. Specflow學習資源
- 25. JavaScript學習資源
- 26. Umbraco學習資源?
- 27. Ocaml學習資源
- 28. Emberjs學習資源
- 29. AOP學習資源
- 30. RoR - 學習資源
您使用的是什麼RDBMS?由於查詢分析器/優化器是不同的,因此很多這將是特定於RDBMS的。 – JNK 2010-11-01 15:51:52
我正在使用SQL SERVER。 – 2010-11-01 15:54:09