2010-08-04 57 views
3

說我有類似下面的查詢:多個where子句需要多個索引嗎?

SELECT * FROM users WHERE username = 'test' AND somethingelse = 'test' 

我不知道是否有必要指標兩列進行優化。 MySQL是否首先查找所有用'test'的用戶名列,然後用'test'在somethingelse列中搜索那些結果?或者它同時發生?

回答

4

是的,你應該。出現在WHERE子句中的每個列和列的組合都應該有一個索引以便進行有效的搜索。

因爲索引是由於被聲明爲主鍵而創建的,所以您可以避免使用主鍵字段。其他列要求您爲它們編制索引。

因此,您將擁有用戶名和somethingelse列的索引。

如果用戶名必須是唯一的,它可能有自己的索引。

+0

用戶名+ somethingelse您是指複合索引嗎? – 2010-08-04 10:17:58

+0

如果您有用戶名+ somethingelse密鑰,則不需要用戶名密鑰(用於搜索;您可能需要用於唯一約束)。 – 2010-08-04 10:42:08

+0

@ soren.qvist - 是的,這是兩個索引。 – duffymo 2010-08-04 11:01:22