MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。

MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。

通过索引优化来实现MySQL的ORDER BY语句优化:

1、ORDER BY的索引优化。如果一个SQL语句形如:

SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];

在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。

2、WHERE + ORDER BY的索引优化,形如:

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];

建立一个联合索引(columnX,sort)来实现order by 优化。

注意:如果columnX对应多个值,如下面语句就无法利用索引来实现order by的优化

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort];

3、WHERE+ 多个字段ORDER BY

SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;

建立索引(uid,x,y)实现order by的优化,比建立(x,y,uid)索引效果要好得多。

MySQL Order By不能使用索引来优化排序的情况

* 对不同的索引键做 ORDER BY :(key1,key2分别建立索引)

SELECT * FROM t1 ORDER BY key1, key2;

* 在非连续的索引键部分上做 ORDER BY:(key_part1,key_part2建立联合索引;key2建立索引)

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

* 同时使用了 ASC 和 DESC:(key_part1,key_part2建立联合索引)

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

* 用于搜索记录的索引键和做 ORDER BY 的不是同一个:(key1,key2分别建立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

* 如果在WHERE和ORDER BY的栏位上应用表达式(函数)时,则无法利用索引来实现order by的优化

SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10;

特别提示:

1>mysql一次查询只能使用一个索引。如果要对多个字段使用索引,建立复合索引。

2>在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。

mysql order by 索引名字_MySQL如何利用索引优化ORDER BY排序语句相关推荐

  1. mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程

    MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描.利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作.当索引的顺序与ORDER BY中的列顺 ...

  2. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  3. mysql order by多列_mysql 多列索和order by

    多列索引的select * where * order by * 查询条件索引很难建立,需要不断调试,最后找出规则: 三原则: 1. 将经常要查询的字段放到多列索引的前面 2. 将要进行等值查询的字段 ...

  4. mysql索引教程_MySQL教程96-MySQL索引类型

    索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同.MySQL 索引可以从存储方式.逻辑角度和实际使用的角度来进行分类. 存储方式区分 根据存储方式的不同,MySQL 中常用的索引在 ...

  5. mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...

    什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...

  6. mysql索引方式_MySQL数据库的索引方式

    MySQL目前主要支持索引方法:B-Tree,Hash,R-Tree B-Tree B-Tree是最常见的索引类型,所有的列都是排序过的,每个叶节点跟节点距离相等.因此,B-Tree适合查找范围的数据 ...

  7. mysql lucene 索引区别_MySQL和Lucene索引对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过 ...

  8. mysql几种索引类型_Mysql几种索引类型的区别及适用情况

    如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...

  9. mysql如何进行视图恢复_mysql事务 视图 索引 备份和恢复

    事务 1.事务: 概念:是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行,要么都不执行 事务是一个不可分割的工作逻辑单元 默认情况下 , 每条单独的SQL语句视为一个 ...

最新文章

  1. 被“嫌弃”的AI药物设计
  2. JS实现博客前端页面(一)—— 封装基础库
  3. c# redis hashid如何设置过期时间_Redis数据库实现原理(划重点)
  4. Ajax中请求被缓存的问题
  5. sqoop 增量导入,不重复
  6. rgb cmyk lab的区别
  7. 给你的主机防火墙添加l7-filter
  8. seleniumpython定位网页元素方法_使用Selenium对网页元素进行定位的诸种方法
  9. 前端学习(482):html之b/s和c/s
  10. 浅谈面向对象的javascript几个特性
  11. linux写入系统状态到文件夹,实验二 Linux系统简单文件操作命令
  12. 可变cell,自适应cell,理解iOS 8中的Self Sizing Cells和Dynamic Type
  13. 金融冬天 IT产业如何应对危险与机遇
  14. CT计算机组成及其特点,浅析CT图像的特点及常用扫描方式
  15. 算法题--字符串排列组合、n皇后、字符出现次数(C++)
  16. 飚王硬盘盒怎么样_四款USB 3.0硬盘盒完全拆解_DIY攒机-中关村在线
  17. paper survey之——水下图像复原与增强水下光通信
  18. Edge的新标签页设置
  19. NET开发邮件发送功能的全面教程(含邮件组件源码)(
  20. 操作系统 第4章 习题整理

热门文章

  1. 配置SAMBA文件共享的基本方法
  2. ubuntu18.04安装mysql数据库
  3. E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-front
  4. SQLAlchemy 中的 Session、sessionmaker、scoped_session
  5. java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis
  6. 点乘和叉乘的区别_关于延时和混响的区别与专用延时器与混响器的调控技巧
  7. const修饰指针和引用的用法【转贴】
  8. TCP的定时器系列 — 保活定时器(有图有代码有真相!!!)
  9. 《C++标准程序库》学习笔记5 — 第七章
  10. 【luogu P5022 旅行】 题解