2014-08-27 115 views
0

我对使用复合主键的表有问题。 该键由一个日期后跟一个bigint组成。MySQL复合主键的问题

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

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

说明使用where和所考虑的行数以百万计的选择显示。

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

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

有什么想法?

谢谢

理查德

+0

Percona集群上的MySQL 5.5。 – 2014-08-27 11:10:23

+1

请发布'show create table foo;'和'explain select ...'的结果; – fancyPants 2014-08-27 11:14:10

回答

1

对于此查询,你想要的索引是id, date

create index idx_foo_myid_mydate on foo(my_id, mydate); 

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

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

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

+0

谢谢哦,添加和索引到66M行的喜悦:) – 2014-08-27 12:15:02