MySQL复合主键的问题

时间:2014-08-27 11:09:57

标签: mysql optimization compound-key

我遇到了使用复合主键的表的问题。 密钥由一个日期后跟一个bigint组成。

即使仅从PK中选择字段并使用包含两列的where子句,

在表上选择要扫描。例如

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

解释选择节目使用的位置和所考虑的行数以百万计。

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

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

有什么想法吗?

谢谢

理查德

1 个答案:

答案 0 :(得分:1)

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

 create index idx_foo_myid_mydate on foo(my_id, mydate);

这是因为where子句中的条件具有相等性和不等式。在可以应用不等式之前,相等条件需要从左到右匹配索引。

MySQL documentation在解释复合索引方面确实做得很好(在我看来)。

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