我在mysql数据库中有一个表,该表很快就会有大量记录,因此我想添加一些索引以提高查询性能。我的查询具有4个字段的变体,(template_id(int),data(text),state(int)和hub_id(int))。而且这4个字段中的任何一个都不是表的主键字段。我对此表的查询中有以下3种类型的where子句:

where state = XXX
where template_id = XXX AND state = YYYY
where hub_id = XXX AND data = 'YYYY' AND template_id = ZZZZ


为具有4个列的where子句组合不同的表创建索引的最佳方法是什么?我应该为int字段创建3个单独的索引,为data(text)字段创建1个FullText吗?我认为最佳实践是为每个where子句组合创建一个索引,但是在那种情况下,我应该如何处理作为文本字段的数据字段,将索引放在文本字段上好吗?

感谢您的建议

最佳答案

寻找您的典型情况,您应该只使用3个索引,最后2个作为组合

 idx1(state)

 idx2(template_id, state)

 idx3(hub_id,data,  template_id)  or  idx3(hub_id,  template_id, data)


取决于数据和template_id的基数

这样3个索引不会相互干扰,sql优化器应该正确使用。

请记住,当sql优化器没有选择您认为更好的索引时,您可以使用FORCE或USE强制选择

07-24 09:37
查看更多