我有一个10M行表product
,其中包含color (int), price (float), weight (float), unitprice (int),
等字段...现在,来自Web的用户动态生成查询,以便使用随机条件从此表中查找数据(颜色必须在这里)和订购 - 如
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中使用大约10个可能的过滤字段(带范围,排序......)索引表(InnoDB或NDB)?
(color, price, weight, create_date, unitprice, ....)
,(color, weight, price, create_date, unitprice, ....)
,(color, unitprice, weight, ....)
....并非所有条件都必须存在于所有查询中。
您将如何为此表编制索引?
答案 0 :(得分:1)
如果要在任何字段上快速查找/过滤/排序,则必须在所有字段上放置索引。
如果必须具有颜色(即在每个查询中使用),则最好在(color, field)
上为每个field
制作复合索引。
如果(color, product_id)
确实是每个常见查询的一部分,那么将聚集索引置于color
上也可能值得一试。
答案 1 :(得分:0)
正如Tomalak已经回答的那样,您可能应该为所有字段(以及复合索引,根据您的查询)添加索引。但当然这可能会减慢写作速度。
如果您不确定如何使用索引,可以使用explain命令。