引言
承接《MySQL高級 —— 高性能索引》,本篇博客將圍繞《高性能MySQL(第三版)》第六章內容進行總結和概括。
與索引的部分一樣,SQL優化也是廣大程序員深入MySQL的又一條必經之路。希望通過本篇博客的總結,能夠爲我們成爲“高級工程師”添磚加瓦。
本博客會從查詢設計的一些基本原則開始,然後介紹一些更加深入的查詢優化技巧,並介紹一些MySQL優化器的內部機制。
一、查詢變慢的原因
MySQL執行查詢時會有很多子任務,通常來說,查詢的生命週期大致可以分爲:
從客戶端,到服務器,然後在服務器上進行解析,生成執行計劃,執行,並返回結果給客戶端。
其中最重要的一環是“執行”,這其中包含了大量爲檢索數據到存儲引擎的調用以及調用後的數據處理,包括排序、分組等。
查詢性能低下最根本的原因是訪問的數據太多。
某些查詢不可避免地需要篩選大量的數據,但大多數情況,性能低下的查詢都可以通過減少訪問數據量的方式進行優化。
對於性能低下的查詢,一個有效的手段是通過下面兩步來進行分析:
1、確認應用程序是否在檢索大量超過需要的數據。通常意味着訪問太多的行,但也會有時候訪問太多的列。
2、確認MySQL服務器層是否在分析大量超過需要的數據行。