gpt4 book ai didi

mysql - MySQL中多列索引的效率

转载 作者:行者123 更新时间:2023-11-29 05:34:09 25 4
gpt4 key购买 nike

如果我有一个带有 3 列索引的 MyISAM 表,类似于

create table t (
a int,
b int,
c int,
index abc (a, b, c)
) engine=MyISAM;

问题是,下面的查询能否充分利用索引:

select * from t where a=1 and c=2;

换句话说,考虑到一个索引是一个b-tree,MySQL是否可以跳过中间的列,仍然对第一列和最后一列进行快速搜索?

EXPLAIN 似乎确实显示索引将被使用,但是,Extra 说:Using where;使用索引,我不知道这到底意味着什么。

最佳答案

答案是否定的。

MySQL 文档非常清楚地说明了如何使用索引:

如果表有一个多列索引,优化器可以使用索引的任何最左边的前缀来查找行。例如,如果您在 (col1, col2, col3) 上有一个三列索引,则您在 (col1)、(col1, col2) 和 (col1, col2, col3) 上具有索引搜索功能。 ( http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html。)

发生的事情是索引被用于“a=1”。加载所有匹配的记录,以查看“c=2”是否为真。过滤器最终使用索引和显式记录过滤的组合。

顺便说一句,如果你想处理两列的所有组合,你需要几个索引:

  • (a, b, c)
  • (b, a, c)
  • (c, b, a)

关于mysql - MySQL中多列索引的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164497/

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