在現代 Web 應用程式漂亮的使用者介面(UI)背後,有非同步服務從資料庫中擷取資料,並具有多種目標,包括載入下拉式清單、擴展資料表、同步元件等。後端程序的任何延遲將被使用者視為緩慢甚至無回應的應用程式。這反過來會降低使用者體驗,並影響他們對你的應用程式有負面看法。因此,必須將查詢回應時間減少至最低可行的數值。在許多情況下,這意味著要以數百分之一秒(而不是秒)測量查詢運轉時間。
毫無疑問,要達到次秒回應時間需要做的事情不只是在可搜尋欄位上定義索引。在今天的文章中,我們將介紹一些在 MySQL 8 中提升查詢效能的技術。
EXPLAIN 命令
要知道需要什麼才能更好地執行查詢的好方法是使用 EXPLAIN 命令。它傳回指定陳述式的查詢最佳化工具執行計劃的格式化描述。你可以使用此資訊來分析查詢和進行疑難排解。
根據預設,EXPLAIN 輸出將查詢計劃以階層表示,其中每個層級代表最佳化工具定義為執行查詢的單一資料庫作業。若要習慣 EXPLAIN 的輸出需要一些練習。但是練習得越多,你就越能更好地了解查詢需要調整的地方。
在 Navicat for MySQL 的 SQL 編輯器中有一個按鈕可以執行 EXPLAIN 命令。結果會以易讀的網格格式顯示:
查詢分析
你可以使用查詢分析來測量查詢執行時間。這是在 MySQL 中使用查詢分析的步驟:
- 使用以下命令啟動分析工具:
SET profiling = 1;
- 然後使用以下命令執行查詢:
SHOW PROFILES;
- 然後,你將看到分析工具具有統計資料的查詢清單。使用以下陳述式選擇要檢查的查詢:
SHOW PROFILE FOR QUERY 1;
...或指派給查詢的數字。
然後,你將得到一個列出查詢花費了多少時間的清單:
你還可以得到 CPU 使用量的分析:
使用 Navicat Monitor 分析查詢效能
Navicat Monitor 是一套安全、簡單而且無代理程式的遠端伺服器監控工具。它具有強大的功能使你的監控發揮最大效用。受監控的伺服器包括 MySQL、MariaDB 和 SQL Server,並與 Amazon RDS、Amazon Aurora、Oracle Cloud、Google Cloud 和 Microsoft Azure 等雲端資料庫相容。查詢分析器畫面顯示所有正在執行的查詢的資訊。你可以使用它來進一步分析和評估查詢效能:
畫面分為幾個部分:
- 最新的死結查詢:顯示在已選取執行個體中偵測到的最新死結的交易資訊。
- 程序清單:顯示已選取執行個體的執行中程序總數,和列出最後 5 個程序,包括 ID、命令類型、使用者、資料庫和時間資訊。
- 查詢分析器:以可自訂和可排序的欄顯示有關查詢陳述式的資訊。
總結
我們在這篇文章中介紹了一些在 MySQL 8 中加快查詢速度的技術。
如果你對 Navicat Monitor 感興趣,可以免費試用 14 天!