mysql使用文件排序,mysql - 如果我选择多个列,MySQL的EXPLAIN将显示“正在使用文件排序”,否则,将显示“正在使用索引” - 堆栈内存溢出...

我有一个像这样的表(为了便于解释,我删除了很多字段)。 orderId是一个int非唯一值,用于显示行的重要性(返回数据时我按行排序)

CREATE TABLE `my_images` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`orderId` int(11) NOT NULL,

`slug` varchar(50) NOT NULL,

`imageFilename` varchar(255) NOT NULL,

`thumb200` varchar(255) NOT NULL,

`thumb600` varchar(255) NOT NULL,

`md5hash` varchar(255) NOT NULL,

PRIMARY KEY (`id`),

KEY `orderId` (`orderId`),

KEY `thumb600` (`thumb600`),

KEY `slug` (`slug`),

KEY `multiple_1` (`md5hash`,`orderId`,`thumb200`,`thumb600`),

KEY `md5hash` (`md5hash`),

KEY `thumb200` (`thumb200`),

KEY `thumb200_2` (`thumb200`,`orderId`),

KEY `orderId_2` (`orderId`,`thumb600`,`thumb200`),

KEY `thumb600_2` (`thumb600`,`orderId`),

KEY `thumb600_3` (`thumb600`,`orderId`),

KEY `orderId_3` (`orderId`,`thumb600`),

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

是的-有很多索引涵盖orderId。 它是为解决当前问题而进行尝试的混合方式,也因为我在WHERE语句中使用了这些字段。

无论如何,如果我运行此命令:

explain SELECT id FROM my_images

ORDER BY orderId asc

它输出这个(“使用索引”)

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE my_images index NULL orderId 4 NULL 174553 Using index

这是预期的-orderId是一个索引。

但是如果我这样做:

explain SELECT id, thumb600, imageFilename, slug FROM my_images

ORDER BY orderId asc

它输出以下内容(使用文件排序):

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE my_images ALL NULL NULL NULL NULL 174553 Using filesort

如果我这样做很奇怪

explain SELECT id, md5hash FROM my_images

ORDER BY orderId asc

它说“使用索引;使用文件排序”

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE my_images index NULL multiple_1 775 NULL 174553 Using index; Using filesort

我注意到的原因是因为我看到了一个缓慢的查询,该查询基本上是“按orderId限制4000,3选择(一堆字段)order”,这花了很长时间,在运行了explain命令后看到了这一点。 怎么办才能始终使用索引? 我是否必须建立一个包含我选择的所有字段的索引? 如果是这样,索引中字段的顺序是否重要?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值