You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主键为clientId时,需创建clientId+itemId联合索引还是仅itemId索引?

索引优化建议

针对你的查询场景,应该创建(clientId, itemId)的联合索引,而非单独的itemId索引,具体原因如下:

  • 你的查询条件是wl.clientId= @clientId(等值匹配) + wl.itemId= ld.itemId(等值关联),联合索引(clientId, itemId)完全匹配这两个等值条件的逻辑顺序:

    1. 先通过clientId=@clientId快速缩小索引范围,定位到该clientId对应的所有索引条目;
    2. 再在这个范围内通过itemId精确匹配目标行,全程可直接在索引中完成查找,无需回表查询聚簇索引的数据。
  • 如果仅创建单独的itemId索引,InnoDB的二级索引叶子节点会存储主键clientId的值。查询时需要先通过itemId找到所有对应clientId,再过滤出等于@clientId的行——若itemId重复度较高,这个过滤过程会遍历大量无关条目,效率远低于联合索引。

  • 虽然clientId是主键,但主键索引仅按clientId排序,同一个clientId下的itemId是无序的。当你需要同时匹配clientId和itemId时,主键索引无法利用itemId的条件加速查找,必须遍历该clientId下的所有行才能找到符合itemId条件的数据,性能表现很差。

内容的提问来源于stack exchange,提问作者kosnkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:10:15