2013-07-13 107 views
0

我有一個兩列MySQL數據庫。 '鑰匙'和'使用'。 Key是一個字符串,Used是一個整數。是否有一種非常快速的方式來搜索特定的密鑰,然後在具有6000000行數據的巨大MySQL數據庫中返回Use。查詢巨大的MySQL數據庫

+0

嘗試在密鑰 –

+1

上創建'index'SHOW CREATE TABLE mytable的輸出將很有用,以確定是否存在合適的索引,並根據正在使用的引擎,使用適當的索引戰略。另外,來自'EXPLAIN SELECT'的輸出將顯示訪問計劃。 – spencer7593

回答

2

您可以通過key場創建索引使其快速:

CREATE INDEX mytable_key_idx ON mytable (`key`); 

實際上,你可以讓它通過創建覆蓋兩個(key, used)領域的指數讀得更快:

CREATE INDEX mytable_key_used_idx ON mytable (`key`, `used`); 

在在這種情況下,MySQL在讀取時可以從索引本身檢索used值,而不讀取表(僅索引掃描)。但是,如果您有很多寫入活動,覆蓋索引可能會運行得更慢,因爲現在它必須更新索引和實際表。

+0

另一種方法是使用分區表:)。 –

+0

如果key是InnoDB表的集羣關鍵字,則覆蓋索引不是必需的,因爲整個表本身就是索引。 – spencer7593

+0

@SumitGupta:我不認爲分區表在這裏會有什麼優勢。它只會帶來不必要的複雜而沒有明顯的好處。 – mvp

0

對於規範性的SQL是:

SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

EXPLAIN 
SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

輸出將提供有關訪問計劃的細節,正在考慮是什麼索引等

的輸出從一個

SHOW CREATE TABLE mytable ; 

將提供有關表,正在使用的引擎和可用索引以及數據類型的信息。

像這樣的查詢性能低下通常表示一個次優的訪問計劃,或者是因爲合適的索引不可用或未被使用。有時,謂詞中列數據類型和文字數據類型之間的字符集不匹配可能會使索引「由特定查詢不可用」。