mysql - 优化 MySql 表中的索引

标签 mysql database database-administration database-optimization

我在 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/

相关文章:

sql - 是否可以在不使用group by子句的情况下计算表中每个组的总和

database - oracle中同义词的区别

mysql - 限制用户仅查看 Rails 中的关联记录

javascript - 如何通过输入类型在一列中选择一个相同的名称值,然后提交按钮?

database - 当我想使用 db-migration 更新数据库时如何防止数据丢失?

database - ORA-12505, TNS :listener does not currently know of SID given in connect des

mysql - 存储包含200万条日志数据的大型CSV文件

postgresql - 使用 ANALYZE 从零/从头开始重建 PostgreSQL 统计信息的最快方法是什么?

php - undefined variable $submit

mysql - 管理频繁更新和查询的表