gpt4 book ai didi

mysql - 在 MySQL 中创建一个索引是另一个索引的子集

转载 作者:可可西里 更新时间:2023-11-01 08:20:56 27 4
gpt4 key购买 nike

我正在使用 MySQL,尽管我怀疑这是一个通用的数据库问题。

我有一个包含 6 个数字列的表格。其中的前 5 个构成主键。

这是一个大表(2000 万行并且还在增长),所以一些查询需要时间 - 大约 10 秒,这本身并不太长,但我需要运行很多查询。

我知道主键是自动索引的——我在我通常查询的主键中单独索引一些列组有什么好处吗?

也就是说,如果我定期查询 5 个主键列中的前 3 个,我应该为这 3 个创建一个额外的索引,还是因为它已经是主键索引的一部分而多余?

最佳答案

对于返回一行或一小部分行的查询来说,十秒是相当长的时间。但是,如果查询返回表内容的 3%,十秒并不算长。

您的主唯一键由复合索引备份,比方说索引

  (I1,I2,I3,I4,I5)

你是对的,像这样的查询

  WHERE I1 = val AND I2 = val AND I3 = val

  WHERE I3 = val AND I2 = val AND I1 = val

应该使用为主键创建的索引。重要的是,复合索引中的列都被使用了,从最左边的列开始。像这样的查询

  WHERE I3 = val AND I4 = val AND I5 = val

不会很好地使用主键的复合索引,如果有的话。对键中提到的列值进行某种计算的查询也不会,例如

  WHERE I1+I2+I3=sumvalue

请记住,“应该有效”与“有效”不同。尝试在 MySQL 中使用 EXPLAIN 命令来确定 DBMS 是否正在为您的查询执行您期望的操作。

http://dev.mysql.com/doc/refman/5.1/en/explain.html

关于mysql - 在 MySQL 中创建一个索引是另一个索引的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com