如何在MySQL中索引查找表

如何在MySQL中索引查找表,mysql,indexing,performance,innodb,b-tree,Mysql,Indexing,Performance,Innodb,B Tree,我有一个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 c

我有一个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 ... ;

select*from product where color=1,price>5,price如果您想快速查找/筛选/排序任何字段,必须为所有字段设置索引

如果必须有颜色列表(即在每个查询中使用),最好为每个
字段
(颜色,字段)
上创建复合索引


如果
color
确实是每个常见查询的一部分,那么将聚集索引放在
(颜色、产品id)
上也值得一试。

正如Tomalak已经回答的那样,您可能应该为所有字段添加索引(以及复合索引,取决于您的查询)。但这当然会减慢写速度


如果您不确定如何使用索引,可以使用该命令。

谢谢您的提示。我在这个表中有10个这样的字段。你是否建议只对2个关键部分进行综合指数?还是全部10个?是的,颜色将是所有索引的第一部分。@QWJ我的建议是每个索引有两个关键部分,表有10个索引。通过这种方式,MySQL已经可以满足查询中最重要的部分,即查看单个索引(color+x)。这里是。如果大量索引开始变得麻烦,您可以收集有关所做查询的统计信息(例如,通过将查询写入日志)并删除几乎从未使用过的索引。@QWJ索引有两个缺点:a)它们增加了表的大小,b)它们减慢了任何写操作(插入、更新、删除)在表上,因为不仅表,而且每个受影响的索引都需要更改。丢弃不必要的索引通常会提高写入性能,创建必要的索引通常会提高读取性能。找到正确的平衡取决于用例。谢谢大家。我将尝试创建10个包含2个部分的索引。但在将来随着表的增长,我可能需要复合索引中的更多部分——这仍然是一个令人头痛的问题。关于插入,我将研究集群或复制等。