如何極限提高MySQL的查詢速度

來源:果殼範文吧 4.74K

我們知道資料庫最重要的就是優化。而提高查詢速度就是優化的其中一點。那麼我們如何提高MySQL的查詢速度呢?下面小編就為大家分享下吧。

如何極限提高MySQL的查詢速度

在進行效能分析前,需要先定位耗時查詢。

MySQL 提供了內建的耗時查詢日誌。使用前,開啟 檔案,將slow_query_log 設定為”On”。 同時將 long_query_time 設定為一個對一次查詢來說比較慢的時間(秒數),比如 0.2。slow_query_log_file 設定為你想儲存日誌檔案的路徑。然後執行程式碼,執行時間超過設定上限的查詢將會被記錄到日誌中。

一旦定位這些煩人的查詢,就可以探究慢的原因。MySQL提供了EXPLAIN關鍵字。可以與SELECT、DELETE、INSERT、REPLACE、UPDATE語句一起使用。只需要如下一樣新增到查詢開始處:

EXPLAIN SELECT , e

FROM picture

LEFT JOIN album ON m_id = ERE _id = 1;

結果是對資料訪問過程的解析。每行代表一個查詢相關的資料表:

重點是表名、使用的key、查詢執行時所掃描的行數。

這個查詢掃描了picture表2百萬行,對每個picture記錄掃描了album表2萬行。意味著,該查詢實際掃描了album表400億行。這個過程可以更高效

索引

使用索引,可以極大提升效能。比如地址簿中的.名字。找一個名字,你可以從頭翻到尾,也可以找到相應的字元標籤頁來快速定位。

使用索引可以避免無必要的表掃描。比如在m_id上新增索引:

ALTER TABLE picture ADD INDEX(album_id);

現在執行查詢,就不會掃描整個picture列表了。首先,所有的album表會被掃描以找到屬於該使用者的album,然後,使用album_id列索引快速定位對應的picture。掃描的行數減少到了20萬,比原始查詢快了317倍。

按照以下方式新增索引可以確保兩張表都能使用對應鍵:

ALTER TABLE album ADD INDEX(user_id);

這次,album表不會被全部掃描,通過user_id鍵就可以精確定位相應的album。然後這100個album被掃描後,通過album_id鍵相關的picture也可以快速找到。每張表都用到了一個鍵進行查詢效能優化,結果比原始查詢快了380倍。

但是並不意味著可以隨意新增索引,因為索引會導致寫資料庫用時增長。所以使用索引導致讀用時縮短,寫用時增長。因此,如果能提升讀效能時再新增索引。使用EXPLAIN來確認索引是否被查詢用到,沒有就刪除。

熱門標籤