gpt4 book ai didi

mysql - 为什么我的带有 ORDER BY 的 MySQL SELECT 语句这么慢,即使列上有 INDEX?

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

我有一个 movies 表。它有 130 万行。

该表在 title 列上有一个 INDEX,顺序为 asc,长度为 255

title 列本身是一个 VARCHAR(1000)

即使使用该设置,以下查询也需要 8 秒才能运行。关于为什么会这样,有人在黑暗中有想法或镜头吗?我很困惑,因为这似乎是一个需要解决的基本问题。

SELECT title
FROM movies
ORDER BY title
LIMIT 150000, 50000

当我取出 ORDER BY 时,查询速度超快(0.05 秒):

SELECT title
FROM movies
LIMIT 150000, 50000

最佳答案

编辑:前缀索引比我使用的部分索引更好。

由于您的索引是部分索引,MySQL 可能不会将其用于 order by 并且仍然必须按值的全长对值进行排序。

让我们试试这个小样本:

 create table o1 (a varchar(10));

insert into o1 values('test1'),('test2'),('test3'),('tes1');
create index oindex on o1 (a);
explain select a from o1 order by a;

MySQL 使用索引来排序。

     # id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'o1', 'index', NULL, 'oindex', '103', NULL, '8', 'Using index'

现在,重新创建一个部分索引:

 drop index oindex on o1;
create index oindex on o1 (a (2) );
explain select a from o1 order by a;

MySQL 现在正在尝试“文件排序”。

 # id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'o1', 'ALL', NULL, NULL, NULL, NULL, '8', 'Using filesort'

对于搜索,部分索引很有用,因为 MySQL 可以删除这些值不完全匹配。对于ORDER BY,MySQL可能就没有这样的运气了。在上述情况下,即使我为最大值创建了一个“部分索引”。列的长度,MySQL 仍然没有使用 ORDER BY 的索引。

关于mysql - 为什么我的带有 ORDER BY 的 MySQL SELECT 语句这么慢,即使列上有 INDEX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836585/

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