[英]Using SELECT with a primary key in MySQL
我正在嘗試加快Web應用程序中的SELECT
查詢的速度。 我做了一些非常重要的優化,例如對PHP返回的行(而不是MySQL本身)進行排序。 現在我只是想知道,在作為主鍵的列上使用SELECT
語句是否更快?
例如,我有一個表,其中包含用於設置的settingKey
和settingValue
列。 當settingKey
是主索引時,使用這樣的語句來獲取settingValue
的內容會更快嗎?
SELECT settingValue FROM config WHERE settingKey="MasterPassword"
我已經嘗試過Google'ing的答案,但沒有明確的答案。
謝謝。 :)
是的,如果您從大型表中選擇一行,則主鍵幾乎可以肯定會提高性能。 這是因為它將在表上創建索引,與執行全表掃描相比,該索引可用於更有效地查找所需的行。
同樣,它將在您的settingKey值中強制唯一性。
我假設在settingValue
上settingValue
沒有索引,部分是因為它沒有意義,部分是因為您沒有提及它。 如果我的假設是正確的,那么按主鍵進行查詢將極大地提高性能。 這是表的最有效訪問路徑。
根據經驗,請勿使用未在WHERE
子句中建立索引的列。
主鍵表示:
這意味着它會很好。
因此,在where子句中使用主鍵可能對性能有好處。
附帶說明:通常建議對主鍵和索引使用“小”和“簡單”的列:
varchar(20)
更容易/更快-考慮排序規則:比較字符串通常意味着不區分大小寫和不區分重音! 例如,在您的情況下,如果主鍵是integer
字段而不是varchar
,那么性能(至少要好一點)會更好。
是的,主鍵具有索引性和唯一性,因此很快。
或者,您可以在要查詢的字段上創建一個新索引。 有關更多詳細信息,請參見http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html 。 這將為您提供與在主鍵上進行查詢時相同的查詢性能。
需要注意的是,這將稍微增加數據庫加載時間。
SELECT settingValue FROM config WHERE settingKey=`MasterPassword`
對於MyISAM
表,此查詢將具有與settingKey
, PRIMARY KEY
或輔助索引相同的性能。
對於InnoDB
表,如果settingKey
是輔助索引,則此查詢最有可能更快。
InnoDB
表是集群的,這意味着表本身就是PRIMARY KEY
索引。
表的大小往往大於輔助索引的大小,因此針對該表的查找將比針對索引的查找慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.