2011-07-20 93 views
1

在我寫一個軟件有搜索一個給定的表信息的能力。搜索表單有5個字段,當然這些字段與表中的不同列相對應,但所有字段都是可選的。MySQL的多個索引VS多列索引搜索

我的問題是關於是否多列索引將工作,並建立一個查詢它的正確方法。

如果我有跨越5列的單一指標,我建立一個查詢來搜索他們,當談到在這個指數我不是搜索領域,做我做這樣的事情:

field1 = 10和field2> 0 AND ...

或者我應該不包括未使用的列呢?

我周圍中搜索有關多列索引的信息,但我似乎無法找到當你需要跳過一列在一個給定的索引,如果你根本不關心這個做什麼在那個具體的例子中。

+0

這取決於查詢工作負載 –

+0

......盡一切所能來避免表掃描。這是查詢無法索引的時候。除非表格行是固定長度,並且很小,否則不要使用表格掃描。像1-20行一樣。 – BradLaney

回答

3

你必須在MySQL瞭解(在InnoDB中的情況下),它只會使用索引的最左前綴。因此,如果索引位於Field1 + Field2中,則只使用中的Field2查詢哪個不能使用整個索引。

並且如果Field1 + Field2 + Field3是索引,則只有Field1 & Field3的查詢在其中會發生同樣的情況。

選項1

你將不得不爲每一個搜索場景單獨的指數,如果你想對每個搜尋。但是,如果表格很大,那麼索引也會變得非常大。 如果這些搜索查詢經常進行,這將是值得的。

選項2

您可以通過將低選擇性列到最左側的用一記漂亮的伎倆,如果你的搜索有低選擇性(即性別),並使用Gender IN(M, F)把它列入了其中子句與其他列一起使用以利用整個索引。

1

對於標準

field1 = 10 AND field2 > 0 

你需要有綜合指數field1 + field2(在這個特定的順序)查詢

+0

如果僅查詢field2,則不使用索引。所以如果查詢可以是任何事情,那麼最好是有單獨的索引。 – KaKa

+0

@kaka:不。如果兩個字段都參與查詢,那麼將使用此索引,或者僅使用'field1'。對於不同的查詢,有一些技巧,除了N個單個索引 – zerkms

+1

@kaka之外,這是正確的,因爲它們被預訂爲field1,然後是field2。 MySQL中的索引從左到右讀取。 – Dex

0

這取決於您的查詢。如果你經常用field1和field2做很多查詢,那麼有一個複合索引是有意義的。否則,您可能會很好地處理多個單列索引。