了解id
是主要关键...
假设我们在 MySQL 中有一个索引,例如
account_id / assignee_id / is_public
但需要此索引的查询的排序id
是按(主索引)进行的
将索引更改为
account_id / assignee_id / is_public / id
在 DB 上更容易。 正确还是不正确?
如果是的话您在文档的哪里看到它?
查询的 子句中有account_id
, assignee_id
,然后按 排序。但排序的列是数据库中的主键,因此 MySQL 默认按主键排序。is_public
WHERE
id
id
带有如下 WHERE 子句的查询:
将受益于在列上定义的索引
(account_id, assignee_id, is_public, id)
。https://dev.mysql.com/doc/refman/en/innodb-index-types.html说:
如果您使用 InnoDB 存储引擎(多年来一直是 MySQL 中的默认存储引擎)定义表,则主键列将隐式附加到索引。因此,索引
(account_id, assignee_id, is_public)
实际上是索引,(account_id, assignee_id, is_public, id)
无需您指定。如果您使用不同的存储引擎,则情况不一定如此(您应该有很好的理由这样做)。
如果 WHERE 子句中的任何条件未使用
=
,则规则会发生变化。也就是说,如果您使用任何不等式或范围比较,则索引的按主键排序优化将不起作用,MySQL 必须手动对结果进行排序。在此处阅读有关 MySQL 如何优化 ORDER BY 的更多信息: https: //dev.mysql.com/doc/refman/en/order-by-optimization.html
您应该使用EXPLAIN来分析 MySQL 计划如何为您的查询使用索引。
您可能会喜欢我的演示文稿《如何真正设计索引》,或者我演示该演示文稿的视频:https://www.youtube.com/watch? v=ELR7-RdU9XU