摘要: 本篇博客僅做爲筆記,若有侵權,請聯繫,當即刪除(網上找博客學習,而後手記筆記,因紙質筆記不便保存,因此保存到網絡筆記)。數據庫
本博將複習與MySQL性能有關的某些要點。性能優化
1、改善性能服務器
數據庫管理員把他們生命中的至關一部分時間花在了調整、試驗以改善DBMS性能上。在診斷應用的滯緩現象和性能問題時,性能不良的數據庫(以及數據庫查詢)一般是最多見的禍因。網絡
能夠看出,下面的內容並不能徹底決定MySQL的性能。咱們只是想回顧一下前面各章的重點,提供進行性能優化探討和分析的一個出發點。多線程
(1)首先,MySQL(與全部DBMS同樣)具備特定的硬件建議。在學習和研究MySQL時,使用任何舊的計算機做爲服務器均可以。但對用於生產的服務器來講,應該堅持遵循這些硬件建議。性能
(2)通常來講,關鍵的生產DBMS應該運行在本身的專用服務器上。學習
(3)MySQL是用一系列的默認設置預先配置的,從這些設置開始一般是很好的。但一段時間後你可能須要調整內存分配、緩衝區大小等。(爲查看當前設置,可以使用SHOW VARIABLES;和SHOW STATUS;.)優化
(4)MySQL一個多用戶多線程的DBMS,換言之,它常常同時執行多個任務。若是這些任務中的某一個執行緩慢,則全部請求都會執行緩慢。若是你遇到顯著的性能不良,可以使用SHOW PROCESSLIST顯示全部活動進程(以及它們的線程ID和執行時間)。你還能夠用KILL命令終結某個特定的進程(使用這個命令須要做爲管理員登陸)。線程
(5)老是有不止一種方法編寫同一條SELECT語句。應該試驗聯結、並、子查詢等,找出最佳的方法。對象
(6)使用EXPLAIN語句讓MySQL解釋它將如何執行一條SELECT語句。
(7)通常來講,存儲過程執行得比一條一條地執行其中的各條MySQL語句快。
(8)應該老是使用正確的數據類型。
(9)決不要檢索比需求還要多的數據。換言之,不要用SELECT * (除非你真正須要每一個列)。
(10)有的操做(包括INSERT)支持一個可選的DELAYED關鍵字,若是使用它,將把控制當即返回給調用程序,而且一旦有可能就實際執行該操做。
(11)在導入數據時,應該關閉自動提交。你可能還想刪除索引(包括FULLTEXT索引),而後在導入完成後再重建它們。
(12)必須索引數據庫以改善數據檢索的性能。肯定索引什麼不是一件微不足道的任務,須要分析使用的SELECT語句以找出重複的WHERE和ORDER BY子句。若是一個簡單的WHERE子句返回結果所花的時間太長,則能夠判定其中使用的列(或幾個列)就是須要索引的對象。
(13)你的SELECT語句中有一系列複雜的OR條件嗎?經過使用多條SELECT語句和鏈接它們的UNION語句,你能看到極大的性能改進。
(14)索引改善數據檢索的性能,但損害數據插入、刪除和更新的性能。若是你有一些表,它們手機數據且不常常被搜索,則在有必要以前不要索引它們。(索引可根據須要添加和刪除。)
(15)LIKE很慢。通常來講,最好是使用FULLTEXT而不是LIKE。
(16)數據庫時不斷變化的實體。一組優化良好的表一下子後可能就面目全非了。因爲表的使用和內容的更改,理想的優化和配置也會改變。
(17)最重要的規則就是,每條規則在某些條件下都會被打破。
2、小結
本章回顧了與MySQL性能有關的某些提示和說明。固然,這只是一小部分,不過,既然你已經完成了本書的學習,你應該能試驗和掌握本身以爲最合適的內容。