簡體   English   中英

在MySQL中將SELECT與主鍵配合使用

[英]Using SELECT with a primary key in MySQL

我正在嘗試加快Web應用程序中的SELECT查詢的速度。 我做了一些非常重要的優化,例如對PHP返回的行(而不是MySQL本身)進行排序。 現在我只是想知道,在作為主鍵的列上使用SELECT語句是否更快?

例如,我有一個表,其中包含用於設置的settingKeysettingValue列。 settingKey是主索引時,使用這樣的語句來獲取settingValue的內容會更快嗎?

SELECT settingValue FROM config WHERE settingKey="MasterPassword"

我已經嘗試過Google'ing的答案,但沒有明確的答案。

謝謝。 :)

是的,如果您從大型表中選擇一行,則主鍵幾乎可以肯定會提高性能。 這是因為它將在表上創建索引,與執行全表掃描相比,該索引可用於更有效地查找所需的行。

同樣,它將在您的settingKey值中強制唯一性。

我假設在settingValuesettingValue沒有索引,部分是因為它沒有意義,部分是因為您沒有提及它。 如果我的假設是正確的,那么按主鍵進行查詢將極大地提高性能。 這是表的最有效訪問路徑。

根據經驗,請勿使用未在WHERE子句中建立索引的列。

主鍵表示:

  • 索引
  • 那是獨一無二的

這意味着它會很好。

因此,在where子句中使用主鍵可能對性能有好處。


附帶說明:通常建議對主鍵和索引使用“小”和“簡單”的列:

  • “小”列(如“僅幾個字節”中所示)意味着比較簡單:比較兩個2字節整數可能要容易,而不是比較兩個4字節整數。
  • 一個“簡單”列:比較兩個4個字節的整數要比比較兩個varchar(20)更容易/更快-考慮排序規則:比較字符串通常意味着不區分大小寫和不區分重音!

例如,在您的情況下,如果主鍵是integer字段而不是varchar ,那么性能(至少要好一點)會更好。

是的,主鍵具有索引性和唯一性,因此很快。

或者,您可以在要查詢的字段上創建一個新索引。 有關更多詳細信息,請參見http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html 這將為您提供與在主鍵上進行查詢時相同的查詢性能。

需要注意的是,這將稍微增加數據庫加載時間。

 SELECT settingValue FROM config WHERE settingKey=`MasterPassword` 

對於MyISAM表,此查詢將具有與settingKeyPRIMARY KEY或輔助索引相同的性能。

對於InnoDB表,如果settingKey輔助索引,則此查詢最有可能更快。

InnoDB表是集群的,這意味着表本身就是PRIMARY KEY索引。

表的大小往往大於輔助索引的大小,因此針對該表的查找將比針對索引的查找慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM