0

我有一个包含两列的表:dteid。这两者一起确定了一个独特的记录。使用这两列设置主键或像这样创建常规索引之间的访问时间是否存在差异:

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

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

4

1 回答 1

0

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

如果您要同时按两列匹配您的行(或始终输出这两列),则显示的两个索引都将被覆盖,并且速度将相对相同(取决于选择性)。

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

这都是理论,实际上我还没有理解你的问题。

于 2012-08-13T10:56:12.783 回答