2011-08-23 168 views
4

我有一個包含10列的表格,我需要支持大多數組合的範圍過濾器。MySQL索引創建

比方說,例如:

WHERE column_a >= a_min AND column_a <= a_max 
AND column_b >= b_min AND column_b <= b_max 
... 

但是,這還不是全部,我也需要通過不同的列,以支持對數據進行排序。

我的問題是,考慮到可能的索引組合創建以優化搜索是巨大的,這是我可能的選擇嗎?

謝謝!

+2

你能做的唯一的事情 - 就是創建N個單指標(每列)。不要把這個答案,因爲好奇,如果有任何替代 – zerkms

+0

@sebasuy,你期望你的桌子持有多少行?對於相對較小的表格,當掃描表格而不是通過索引訪問時,性能可能實際上會更好。 –

+0

@Mark,表中會有很多記錄,我估計在6到10萬之間。謝謝。 – sebasuy

回答

4

分別爲每個列創建索引。讓MySQL找出如何使用它們。


此外,在一個側面說明,在得到使用between運營商的習慣:

column_a between a_min AND a_max 

而不是:

column_a >= a_min AND column_a <= a_max -- ugly and the semantic is not as obvious 

它更容易閱讀和類型和不準確同樣的事情。

+0

+1,但不得不不同意你對'BETWEEN'的評論,對於我,'=>'AND'<='比'BETWEEN'更加明確。 (我懷疑有人問過這個問題是否存在> = AND <=包含範圍邊界) –

+0

我同意凱文的觀點,這更明確。感謝您的回答,+1。 – sebasuy

+0

我不知道這個「之間」運營商我真的很高興你提到它! – AsTeR

0

爲查詢中使用的所有列創建索引。

(column_a,COLUMN_N)

見的範圍訪問方法在這裏多部分索引:http://dev.mysql.com/doc/refman/5.0/en/range-optimization.html

+0

只要他沒有與所有領域的平等比較 - 根據你給出的鏈接,你會發現組合索引**不起作用**(或者確切地說 - 只使用第一列索引) – zerkms