繁体   English   中英

当 allready 为主时添加索引

[英]Add index when allready is primary

这是我的myTable

clientId, itemId, sellId

primary 在 clientId 上,也有btree index no uniqe uniqe on sellId

现在我有一部分非常慢的查询

LEFT OUTER JOIN myTable wl ON wl.itemId= ld.itemId and wl.clientId= @clientId

问题是我应该在这里为clientIditemId创建索引组合,还是因为clientId是主要的然后只为itemId创建索引?

在此处输入图像描述

你的问题是这样的:是不是要把表的主键PK放到多列索引中作为最后一列?

如果使用InnoDB存储引擎,答案是否定的。 为什么不? InnoDB 已经将 PK 作为索引的一部分包含在内。

如果您不使用 InnoDB —— 也就是说,如果您使用 MyISAM 或 AriaDB(在 MariaDB 中),答案是肯定的。

不过,您应该评估索引对查询的帮助程度。

在 wl.itemId= ld.itemId 和 wl.clientId= @clientId

乞求

INDEX(itemId, clientId) -- in either order

但是,如果这些列中的任何一个是wlPRIMARY KEY ,则不需要索引,也没有用。 PK 将提供对所需行的即时访问。 另一列只能验证它是否匹配——即从JOIN中删除该行。

我应该在这里为 clientId 和 itemId 创建索引组合吗

是,如果两者都不是UNIQUE的(请记住 PK 是“唯一的”。)

或者因为 clientId 是主要的,所以只针对 itemId

MySQL 几乎永远不会使用两个单独的索引。 (请记住,PK一个索引。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM