0

我对使用复合主键的表有疑问。密钥由一个日期和一个 bigint 组成。

即使仅从 PK 中选择字段并使用包含两列的 where 子句,表上的选择看起来也正在扫描。例如

SELECT mydate, myid from foo WHERE mydate >='2014-08-26' AND my_id = 1234;

解释使用 where 和考虑的行数以百万为单位的选择显示。

一个奇怪的地方是 key_len,它显示为 7,看起来太小了。

我的直觉说钥匙坏了,但我可能遗漏了一些明显的东西。

有什么想法吗?

谢谢

理查德

4

1 回答 1

1

对于此查询,您想要的索引位于id, date

 create index idx_foo_myid_mydate on foo(my_id, mydate);

这是因为where子句中的条件有等式和不等式。等式条件需要从左到右匹配索引,然后才能应用不等式。

MySQL文档实际上(在我看来)在解释复合索引方面做得很好。

您现有的索引将用于 上的不等式mydate。但是,将扫描相关日期之后的所有索引以满足条件 on my_id。使用正确的索引,MySQL 可以直接转到正确的行。

于 2014-08-27T11:22:35.720 回答