免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6208 | 回复: 9

【讨论中】InnoDB是否不支持倒序索引 [复制链接]

论坛徽章:
0
发表于 2012-07-05 13:08 |显示全部楼层
本帖最后由 cenalulu 于 2012-07-05 15:29 编辑

已有索引PK uid
index uid_2(uid, ordinal, mtime)

select * from table_name where uid='xxx' order by order by ordinal, mtime desc  limit 0, 100;
+----+-------------+----------------+------+-----------------+------+---------+-------+------+-----------------------------+
| id | select_type | table          | type | possible_keys   | key  | key_len | ref   | rows | Extra                       |
+----+-------------+----------------+------+-----------------+------+---------+-------+------+-----------------------------+
|  1 | SIMPLE      | table_name | ref  | uid,uid_2 | uid  | 4       | const |   53 | Using where; Using filesort |
+----+-------------+----------------+------+-----------------+------+---------+-------+------+-----------------------------+

没有使用uid_2索引啊,是不是InnoDB不支持倒序索引?

论坛徽章:
0
发表于 2012-07-05 13:15 |显示全部楼层
本帖最后由 horizonhyg 于 2012-07-05 13:21 编辑

回复 1# ayalastrike


    树的前序遍历和后续遍历效果是一样的,所以见索引不分先后。但是排序不能乱排,后边两个排序必须一致,不然索引是过滤不到的。

论坛徽章:
0
发表于 2012-07-05 13:20 |显示全部楼层
本帖最后由 ayalastrike 于 2012-07-05 13:20 编辑

extra列中显示filesort,还是进行了文件排序了啊,是不是意味着uid_2索引其实没有效果,可以删掉

论坛徽章:
0
发表于 2012-07-05 13:22 |显示全部楼层
回复 3# ayalastrike


    我编辑了下,你再试试,改成相同顺序的他就会走索引了。

论坛徽章:
0
发表于 2012-07-05 13:38 |显示全部楼层
是的,我把 order by ordinal, mtime desc改成 order by ordinal, mtime asc后,没有文件排序了。
可是问题是我需要 order by ordinal, mtime desc这样取数据
这样是不是意味着uid_2索引没有任何作用

explain SELECT  SQL_CALC_FOUND_ROWS * FROM table_name WHERE uid = '100055'  order by ordinal, mtime asc LIMIT 0, 100;
+----+-------------+----------------+------+-----------------+-------+---------+-------+------+-------------+
| id | select_type | table          | type | possible_keys   | key   | key_len | ref   | rows | Extra       |
+----+-------------+----------------+------+-----------------+-------+---------+-------+------+-------------+
|  1 | SIMPLE      | table_name | ref  | uid,uid_2 | uid_2 | 4       | const |   34 | Using where |
+----+-------------+----------------+------+-----------------+-------+---------+-------+------+-------------+

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2012-07-05 15:26 |显示全部楼层
本帖最后由 cenalulu 于 2012-07-05 15:27 编辑

用于排序的column的排序顺序必须一致。
order by ordinal asc , mtime desc
order by ordinal desc , mtime asc
以上两种是用不到索引的。

order by ordinal asc , mtime asc
order by ordinal desc , mtime desc
以上两种是可以用到索引的。

楼主的一个正序一个逆序的排序需求是索引无法满足的

论坛徽章:
0
发表于 2012-07-05 17:19 |显示全部楼层
回复 5# ayalastrike


    是的,那个索引确实没有用

论坛徽章:
0
发表于 2012-07-06 16:05 |显示全部楼层
1正1反

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
发表于 2012-07-06 16:25 |显示全部楼层
lulu说的很对
其实,楼主也可以注意下key_length,说明只用到了组合索引的第一个索引列(最左)

论坛徽章:
0
发表于 2012-07-06 17:30 |显示全部楼层
肯定不支持

第二列已经是乱序的了  

在第一列是一样的情况下  第二列才是顺序的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP