gpt4 book ai didi

MySQL:为什么简单查询不使用索引,执行文件排序

转载 作者:行者123 更新时间:2023-11-30 22:53:37 26 4
gpt4 key购买 nike

我有一个这样定义的表:

`id` int(10) NOT NULL AUTO_INCREMENT,
`slug` varchar(150) NOT NULL,
`title` varchar(150) NOT NULL,
`description` text NOT NULL,
`ordinal` int(10) NOT NULL DEFAULT '0'

我们称它为t1

t1 中,我有一个关于ordinal 的索引。

这个表只包含几行,它是一个定义表,所以我通常这样做,以便按照我想要的顺序获取定义

SELECT * FROM t1 WHERE 1 ORDER BY ordinal;

如果我对该语句执行EXPLAIN,我会得到以下结果:

id? select_type?    table?  partitions? type?   possible_keys?  key?    key_len?    ref?    rows?   Extra?
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 5 Using where; Using filesort

上面的行是否对齐并不重要。重要的是它使用的是文件排序,我不明白为什么。

因为它在这个表中只有 5-10 行,所以感觉它并不重要,但是文件排序让我的 open_tables 变得有点疯狂,因为 MySQL(根据强大的互联网)打开了两个表对于它需要执行的每个文件排序查询。

非常感谢您在这里提供的任何帮助。谢谢。

最佳答案

您的表在可能会被利用的“序数”列上没有任何索引。此外,由于您的 WHERE 子句位于固定的“1”值上,该值始终为真,但没有要比较的列,甚至没有查找索引来提供帮助,因此它无法选择任何东西……因此您正在经历一个文件排序。 .. 没有适用于 where 的索引,也没有适用于 order by 子句的索引。

关于MySQL:为什么简单查询不使用索引,执行文件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27323410/

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