2012-08-13 86 views
0

我有一个表,其中包含两列:dteid。在一起,这两个确定一个独特的记录。有没有使用这两个列设置一个主键或只创建一个常规的索引像这样之间的访问时间差:主键和索引之间的访问时间差异mysql

create index idx on mytable (dte, id) 
create index idx2 on mytable (id) 

我在访问时间上专门寻找答案与其他表的连接是也有这两列。特别是当我在连接上执行explain时,看起来很奇怪,它告诉我需要检查其中一个表中的15行,其中该配对再次是唯一的。

+0

http://stackoverflow.com/a/708508/1506008 – Shubhansh 2012-08-13 06:31:28

+0

http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html – Shubhansh 2012-08-13 06:36:32

+0

这不回答这个问题虽然:在这里速度差异? – Alex 2012-08-13 11:46:30

回答

0

简而言之,primary key标识磁盘上的一行。其他索引包含指向主键的链接(至少在InnoDB中)。索引应该存在于内存中,并将数据库引擎发送到缺少数据的磁盘。如果索引包含查询所需的所有数据(以便引擎不需要在磁盘上),则该索引在查询中被称为covering

如果你打算一次匹配两列的行(或者总是输出它们),那么两个显示的索引将被覆盖,并且速度将会相对相同(取决于选择性)。

但索引本身需要RAM。对于InnoDB,任何非主键都包含主键的副本。因此,就你而言,将第二个字段包含在主键中可能会更好。

这是所有的理论,在实践中我还没有理解你的问题。