我应该为WHERE子句中的所有字段添加索引吗? - MySQL

Kei*_*ons 11 mysql indexing optimization where

在我的程序中,我只有很少的插入,并且任何经常运行的都不需要立即,因此已经更改为INSERT DELAYED.我应该查看我的代码并查看WHERE子句中引用的字段并为每个字段添加索引吗?如果是这样,我使用什么类型的索引?它只是减慢插入?

我也可以在任何数据类型上使用这些索引吗?

Jac*_*cob 18

我们可以考虑索引的两个主要位置:WHERE子句中引用的列和JOIN子句中使用的列.简而言之,应该索引这些列,以便您搜索特定记录.

  • 仅索引WHERE和ORDER BY子句中所需的那些列.索引列丰富将导致一些缺点.
  • 对于您考虑索引的列,请使用NOT NULL属性,以便永远不会存储NULL值.
  • 使用--log-long-format选项记录未使用索引的查询.通过这种方式,您可以检查此日志文件并相应地调整查询.也是慢查询日志.
  • EXPLAIN语句可以帮助您揭示MySQL将如何执行查询.它显示表的连接方式和顺序.这对于确定如何编写优化查询以及是否需要对列进行索引非常有用.

这个博客很好.


Mik*_*ant 5

您应该始终在 WHERE 子句中使用的任何字段上添加索引(无论是用于 SELECT、UPDATE 还是 DELETE)。索引的类型取决于字段中数据的类型以及是否需要每行都有唯一值。一般来说,默认索引类型(哈希与 Btree)最好保留默认设置,除非您真的知道自己在做什么。

现在,您是否使用单独索引(每个字段一个)或复合索引取决于应用程序的工作方式,并且是一个更高级的主题,因此一般来说,如果刚刚开始,只需为每个字段使用 和 索引。请注意,您的主键自动具有索引,因此您无需在这些索引上创建另一个索引。