MySQL 中慢速「SELECT COUNT(*)」查詢的最佳化
查詢大表時,儘管存在WHERE 子句。讓我們分析一個特定的情況,其中帶有範圍條件的「SELECT COUNT(*)」查詢花費了過多的時間。
「EXPLAIN」提供的解釋顯示正在發生範圍掃描。然而,完整計數和過濾計數之間的性能差異仍然無法解釋。
在檢查表定義時,我們觀察到「change_event_id」欄位作為主鍵,以叢集形式儲存。這表示主鍵值與資料一起儲存在同一磁碟頁上。因此,主鍵上的範圍掃描需要讀取所有資料頁。
為了提高效能,請考慮以下策略:
此外,建議將「change_event_id」欄位修改為「bigint unsigned」(如果是)從零開始遞增。這將確保它可以儲存更大的值而不會溢出。
透過實施這些最佳化,具有範圍條件的「SELECT COUNT(*)」查詢的效能應顯著提高,使其與完整計數相當.
以上是如何最佳化 MySQL 中涉及主鍵範圍掃描的緩慢「SELECT COUNT(*)」查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!