【发布时间】:2011-07-12 03:08:17
【问题描述】:
我需要一些帮助来避免对该查询进行文件排序。
SELECT id
FROM articles USE INDEX(group)
WHERE type = '4'
AND category = '161'
AND did < '10016'
AND id < '9869788'
ORDER BY id DESC
LIMIT 10
INDEX(group) 是 (type, category, did, id) 的覆盖索引
由于ORDER BY id DESC,执行文件排序。有没有办法避免对此类查询进行文件排序?
【问题讨论】:
-
所有这些列的数据类型是数字(例如 int)吗?如果是这样,请从查询中的所有数字中删除引号。这将大大加快速度。
-
@Asaph:隐式转换可能没什么大不了的;我会删除单引号,因为它们给人的印象是错误的(假设列数据类型是数字)
-
@OMG Ponies:你确定吗?即使对于这部分查询:
did<'10016' and id<'9869788'?考虑排序数字和字符串是不同的。例如。 1 -
@Asaph:在可能的情况下,隐式转换由列数据类型决定。如果
did是数字,您会不会期望与字符串进行比较时出错? ;) -
@OMG Ponies:我在 MySQL 中进行了一些测试,并证实了您所说的。固执地,我认为选择将字符串转换为整数(可能有损)而不是将整数转换为字符串(非有损)在逻辑纯粹主义者的意义上是完全错误的。但从实际的角度来看,将字符串转换为整数几乎总是用户想要的。所以我认为这个选择是合理的。 @Vern:感谢您试用。无论如何,您都应该删除引号,即使性能没有提高。
标签: mysql sql sql-order-by filesort