我有一個10M行的表product
與color (int), price (float), weight (float), unitprice (int),
等字段等...現在來自Web的用戶動態生成查詢,以隨機條件從此表中查找數據(顏色是必須在這裏)和訂單由諸如如何索引MySQL中的查找表
select * from product where color=1 and price >5 and price <220 and .... order by unitprice limit 75, 25;
select count(*) from product where color=3 and weight <500 and price <30 ... ;
如何在MySQL索引的表(InnoDB的或NDB)用約10個可能的過濾字段(範圍,排序...)這樣?
編輯:在我的理解MySQL最有可能將只選擇一個索引的查詢,只有組合索引的左手部分將工作。顯然索引所有可能的組合是不是一個可行的選擇,如(color, price, weight, create_date, unitprice, ....)
,(color, weight, price, create_date, unitprice, ....)
,(color, unitprice, weight, ....)
....不是所有的條件都一定存在於所有查詢。
你會怎麼做索引這個表?
感謝您的提示。我在這個表中有10個這樣的字段。你建議只有兩個關鍵部分的複合指數?或全部10?是的,顏色將成爲所有指標的第一部分。 – 2010-10-03 08:44:13
@QWJ我的建議是每個索引的兩個關鍵部分,您的表的10個索引。這樣MySQL就可以通過查看單個索引(color + x)來滿足查詢最重要的部分。這裏是[一些更多的閱讀主題](http://stackoverflow.com/questions/1277865/mysql-indexes-how-many-are-enough)。 – Tomalak 2010-10-03 08:52:22
你可以,也許,收集有關所作查詢統計(通過寫查詢日誌,例如),並刪除那些很少使用,如果大量的索引開始證明麻煩的索引。 – 2010-10-03 09:18:38