繁体   English   中英

我应该使用唯一字段还是非唯一字段开始 MySQL 索引?

[英]Should I begin a MySQL index with unique or non-unique field?

我遇到的问题如下:

  • 我有一个包含大约 100000000 行的表
  • 它有 22 个字段 - 一些数字,一些文本
  • 它有一个主键id (自动递增的整数)
  • 它有一个bigint类型的字段another_id和一个唯一的键
  • 它有一个名为state的字段,只能取 4 个整数值(0 到 3)
  • 我需要尽快执行以下形式的查询:
SELECT COUNT(*) 
FROM my_table 
WHERE another_id IN ( <about 100 values> ) 
AND state = ...

对于不同的state值。

索引应该如何? 我在考虑两个选择:

  • KEY another_id:state (another_id, state)
  • KEY state:another_id (state, another_id)

这两种变体之间的性能有什么不同吗? 还有什么要考虑的吗?

编辑:引擎是 InnoDB

对于您显示的查询,您应该按stateanother_id创建索引。

首先使用在相等条件中引用的任何列定义索引,然后添加在范围条件或 ORDER BY 或 GROUP BY 中引用的列。

您可能还喜欢我对 MySQL 中多列索引的字段顺序是否重要的​​回答或我的演示如何设计索引,真的,或视频

我同意楼上的回答。 一个澄清虽然是你想要 ita 哈希索引而不是 btree 索引。 它应该工作得更快。 哈希索引不适用于任何涉及不等式的查询,例如 <=

暂无
暂无

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

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