Mysql

解釋 MySQL 索引

  • April 4, 2011

在我探索 MySQL 及其高級特性的過程中,尤其是在性能優化方面,我遇到了一些非常重要的 SQL 性能改進特性,我們大多數人都知道“索引”

我繼續進行一些實驗並發現,只需將附加索引應用於最常用的列之一,我就可以將我的數據庫讀取和高級寫入功能提高 20 到 100 倍。

自然會出現一個問題,如果這樣的性能改進是可行的,為什麼不為每個數據庫列設置索引,並讓數據庫操作速度提高 2 到 100 倍?

顯然,預設情況下不會發生這種情況是有原因的。

那麼,如何知道索引什麼以及何時索引?索引的限制是什麼,以及如果我過多地索引索引,它會如何影響我的整體系統性能。 索引是否會在使用過多時影響我的數據庫讀寫性能?

我使用 InnoDB 作為我的主數據庫引擎,我的系統執行 perl + apache + mysql CPU:Intel(R) Xeon(R) CPU L5520 @ 2.27GHz RAM:8192 MB

自然會出現一個問題,如果這樣的性能改進是可行的,為什麼不為每個數據庫列設置索引,並讓數據庫操作速度提高 2 到 100 倍?

首先,索引並非在所有情況下都有幫助。如果查詢寫得不好,索引將無濟於事。索引會佔用相當多的空間,通常比數據本身大很多倍,因此為每一列添加索引將非常浪費。

那麼,如何知道索引什麼以及何時索引?索引的限制是什麼,以及如果我過多地索引索引,它會如何影響我的整體系統性能。

您的查詢決定了哪些數據需要被索引。該EXPLAIN命令將使您了解需要索引的內容以及索引如何有效地幫助您的查詢執行。

索引不會幫助糟糕的查詢。例如,附加索引對諸如select * from table where col like "%stuff%"select * from table where col rlike "ing$"不會有太大幫助的查詢。在這些情況下,您最好調整查詢而不是索引。

首先調整您的查詢。使用EXPLAIN並觀察慢查詢日誌。一旦您確認無法再調整查詢,然後開始添加索引。

引用自:https://serverfault.com/questions/255357