Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371284
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-05 11:44
个人简介

文章不在长,坚持不懈记录下努力前行的脚步

文章分类

全部博文(166)

文章存档

2017年(19)

2016年(59)

2015年(88)

我的朋友

分类: Mysql/postgreSQL

2016-08-03 15:57:25

有的时候,MySQL不用额外的排序而是使用索引就能满足order by操作。
即使order by不直接匹配索引,索引也能用到,只要所有未用到索引的部分和order by之外的索引列在where字句中,
下面的查询order by部分使用到了索引
SELECT * FROM t1
  ORDER BY key_part1,key_part2,... ;


SELECT * FROM t1
  WHERE key_part1 = constant
  ORDER BY key_part2;


SELECT * FROM t1
  ORDER BY key_part1 DESC, key_part2 DESC;


SELECT * FROM t1
  WHERE key_part1 = 1
  ORDER BY key_part1 DESC, key_part2 DESC;


SELECT * FROM t1
  WHERE key_part1 > constant
  ORDER BY key_part1 ASC;


SELECT * FROM t1
  WHERE key_part1 < constant
  ORDER BY key_part1 DESC;


SELECT * FROM t1
  WHERE key_part1 = constant1 AND key_part2 > constant2
  ORDER BY key_part2;


但是有的时候,MySQL不会使用索引来解决order by的问题,即使where条件已经用到索引
1.order by使用不同的索引
SELECT * FROM t1 ORDER BY key1, key2;
2.order by部分列非索引前缀
SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
3.升降序混合
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
4.获取行的索引与order by部分不是同一个索引
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
5.order by列上有函数
SELECT * FROM t1 ORDER BY ABS(key);
SELECT * FROM t1 ORDER BY -key;
阅读(729) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~