我在 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 个列,其中子句的不同组合?我应该为 int 字段创建 3 个单独的索引,为数据(文本)字段创建一个全文吗?我假设最佳做法是为每个 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 强制选择
关于mysql - 优化 MySql 表中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476919/