为什么mysql表里order by id desc用不到索引?
黄舟
黄舟 2017-04-17 11:05:57
[MySQL讨论组]

ID是自增主键,不知道为什么就是用不到索引,explain的时候rows扫的是全表,效率很低,换其他已经索引的列也不行,分页用到的order by。where 的时候可以用到索引,就是一order by就不行了,请教各位前辈~~~

这样可以用到索引:

SELECT * FROM `XXX` ORDER BY id DESC LIMIT 10,40;

这样用不到索引:

SELECT * FROM `XXX` ORDER BY id DESC LIMIT 10,41;

用不到索引:

SELECT * FROM `give` ORDER BY id desc LIMIT 400,20;

这样也用不到索引。。。:

SELECT * FROM `give` ORDER BY id desc;

update:现在库里有520rows,有朋友说是因为行数小于1000,索引mysql认为全表扫效率更高,是这样的吗?
但是慢查询日志里他效率确实不高啊!

是mysql配置的问题???tell me why,困惑了~~~

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
阿神

我觉得做分页完全可以这样:

SELECT *
FROM `XXX` AS `x`
INNER JOIN(
    SELECT `id`
    FROM `XXX`
    ORDER BY `id` DESC
    LIMIT M,N
) AS `t`
USING(`id`)

子查询用到了覆盖索引,所以不需要扫描磁盘就找到了所需要的行的id,然后可以直接去磁盘取需要的数据了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号