我在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强制选择