MySQL 优化 —— SQL优化概述(优化专题开篇词)
引言
最近為了研究索引的知識,特地去MySQL 官網研讀了一番,發現MySQL官網有比較全面的MySQL優化方案和知識背景,所以希望通過一系列文章,將官網的知識翻譯總結一下,避免日后去網上胡亂搜索產生不必要的知識勘誤風險。
本系列文章標題都會以 “MySQL 優化” 前綴開頭,有些可能是翻譯,也會有少量自己的總結和試驗,針對 MySQL 5.7 版本進行。當然也并不會全部將官網的優化專題翻譯完,可能會挑選我自己認為比較重點的部分進行翻譯和總結。
我的翻譯文章大多數都沒有精推細敲的進行翻譯,可能有人會比較失望,但考慮到我的工作狀態和時間不允許我過度的專注于翻譯工作,不過我依然會秉承最質樸的求真精神,把翻譯工作做好。同時,為了避免個人英語水平對原文知識的誤讀,我會在每篇翻譯文章的引言部分貼出原文的 URL 方便他人去查閱和對比閱讀增加知識的準確性,同時我更希望能有人站出來指正我的錯別字和翻譯問題。
再次強調一下我的翻譯風格,并不是精推細敲型,會以一種比較松散但并不丟失原意的方式來翻譯MySQL官方文檔。如下是我的翻譯示例:
原文:To make a slow?SELECT ... WHERE?query faster, the first thing to check is whether you can add an index.
我的翻譯:為了讓一個 SELECT ... WHERE 執行的更快,第一件需要考慮的事情就是——我們是否可以為其建立索引。
這就是——“比較松散,但無傷原意”,希望大家多多指正。
以下部分翻譯自MySQL官網:https://dev.mysql.com/doc/refman/5.7/en/select-optimization.html
SQL優化需要考慮的方面
查詢,以 SELECT 子句的形式,執行著對數據庫的全部查找操作。調試這些語句是優先級最高的,不論是在動態web頁面實現次秒級別的響應,還是縮短生成大量夜間報告的時間,都是如此。
除了 SELECT 語句,這些用于查詢性能優化的調試技術同樣會應用于構建諸如 CREATE TABLE... AS SELECT, INSERT INTO ...SELECT, 和 DELETE 語句中的 WHERE 子句等。這些語句需要額外的性能考慮,這是因為他們結合了寫和讀的操作。
最主要的性能優化考慮有如下這些:
1、為了讓一個 SELECT ... WHERE 執行的更快,第一件需要考慮的事情就是——我們是否可以為其建立索引。給?WHERE 子句中的字段建立索引,以此來加速求值、過濾以及對結果集進行的最終檢索。為了避免浪費磁盤空間,構建一個“小集合”式的復合索引來加速許多相關的查詢。(博主:意思是復合索引不僅可以減少對磁盤空間的過度占用,同時也可以支持許多相關的查詢,因此,不要創建太多的單一索引,可以用復合索引的地方,要優先考慮復合索引)
索引在涉及使用諸如 join 和 外鍵等的多表查詢時尤其重要。你可以使用 EXPLAIN 語句來判斷在 SELECT 中究竟用到了哪種索引。
2、單獨調試非常耗時的查詢的每一個部分,如MySQL函數調用等。一個函數可以被結果集中的每條記錄執行一遍,也可以被表表中的每條記錄執行一遍,這取決于查詢的結構,即我們如何構建我們的查詢語句。
3、盡量減少查詢中全表掃描的次數,特別是大表。
4、定期使用 ANALYZE TABLE 語句來進行表統計,這樣SQL優化器才可以有更多的信息來構建有效的執行計劃。
5、學習調試技術,索引技術,和配置參數,它們都是特定于每張表的存儲引擎的。InnoDB和MyISAM 都有一系列的教程來使我們的查詢保持更高的性能。
6、調整MySQL用于緩存的內存區域大小和配置。以有效的方式使用 InnoDB buffer pool,MyISAM key cache,和 MySQL 查詢緩存,重復的查詢之所以會運行的更快,是因為第二次之后都是從內存中獲取數據的。
7、即便是使用內存作為緩存的查詢,你可能依然需要更深入的優化以便使它們需要更少的緩存內存,讓你的應用程序具備更好的可擴展性。可擴展性意味著你的應用程序可以處理更多同時訪問的用戶,更大的請求量,而不會產生比較大的性能落差。
8、處理鎖的相關問題。在你的查詢速度可能會被其他同時訪問表的?session 影響到的地方處理鎖的問題。
我的總結
總的來說,本篇概述的翻譯工作還算順利,當然非常感謝有道詞典對我的幫助,越到后面的部分,翻譯工作越順利,查詞典的次數也越來越少。不得不說多看英文文檔對自己的提升也是很大的,不僅可以獲得最權威的技術解讀,同時對英語閱讀也有很大幫助。
針對上面的 8 個方面,我個人認為比較重要的是其中的第 1、5,其中第一條應該是占據程序員優化的大部分工作,因此我會對這一專題進行著重翻譯和總結,其他的部分我也會根據情況和實際工作中的需要(開發方面,非專業DBA)酌情處理,希望大家可以給予更多的意見和建議。
總結
以上是生活随笔為你收集整理的MySQL 优化 —— SQL优化概述(优化专题开篇词)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 透彻理解回文~单链表的逆序~
- 下一篇: linux下nand flash驱动工作