MySQL索引与性能(4) 排序

我们知道B树索引是有序的,那么可不可以通过只扫描索引就能完成order by操作呢?答案是肯定的,但条件也比较 苛刻:只有当索引的列顺序和order by字句的列顺序完全一致,且order by字句中所有列的排序方式要么全部都是ASC, 要么全部都是DESC,MySQL才能使用索引来对结果进行排序;如果查询需要关联多个表,则条件更苛刻,只有当order by 字句中的列全部为驱动表(执行计划中)时,才能使用索引做排序。

下面我们来看一些例子:假设users表上有索引(login_id,status)

root@test 05:03:12>explain select id from users order by login_id,status\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: users
         type: index
possible_keys: NULL
          key: login_id
      key_len: 387
          ref: NULL
         rows: 5894108
        Extra: Using index
1 row in set (0.00 sec)  

root@test 05:03:17>explain select id from users order by status\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: users
         type: index
possible_keys: NULL
          key: login_id
      key_len: 387
          ref: NULL
         rows: 5894108
        Extra: Using index; Using filesort
1 row in set (0.00 sec)  

root@test 05:03:26>explain select id from users order by login_id desc,status\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: users
         type: index
possible_keys: NULL
          key: login_id
      key_len: 387
          ref: NULL
         rows: 5894108
        Extra: Using index; Using filesort
1 row in set (0.00 sec)  

root@test 05:04:03>explain select id from users order by login_id desc,status desc\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: users
         type: index
possible_keys: NULL
          key: login_id
      key_len: 387
          ref: NULL
         rows: 5894108
        Extra: Using index
1 row in set (0.00 sec)

注:如果在Extra列出现using filesort,表示无法按索引顺序扫描。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索索引
, index
, null
, root login
, using
, users
order
mysql 排序 索引、mysql 排序字段 索引、mysql 联合索引 排序、mysql 索引默认排序、mysql索引排序规则,以便于您获取更多的相关知识。

时间: 2024-12-23 18:33:06

MySQL索引与性能(4) 排序的相关文章

MySQL索引与性能(3) 覆盖索引

覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据,能极大地提高性能.覆盖索引对 InnoDB的聚簇索引表特别有用,因为可以避免InnoDB二级索引的二次查询.MySQL里只有B树索引能做覆盖索引,因为必 须要存储索引列的值,而哈希索引.空间索引.全文索引不可以. 当发起一个覆盖索引的查询时,在explain的Extra列可以看到Using Index,下面看一个例子,在表users有一个多列 索引(login_id,status),执行计划如下 root@test 01:30

MySQL索引与性能(2) 聚簇索引

聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织 的(类似于Oracle的索引组织表). InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义 个主键作为聚簇索引. 下图形象说明了聚簇索引表(InnoDB)和普通的堆组织表(MyISAM)的区别: 对于普通的堆组织表来说(右图),表数据和索引是分成存储的,主键索引和二级索引存储上没有任何区别. 而对于聚簇索引表来说(左图),表数据

MySQL索引与性能(1) 索引类型

本文讨论MySQL支持的索引类型及其优缺点.要注意的是:在MySQL中,索引是在存储引擎层而不是服务器层实现,所 以不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引. B+树索引 B+树是一种经典的数据结构,由平衡树和二叉查找树结合产生,它是为磁盘或其它直接存取辅助设备而设计的一种平 衡查找树,在B+树中,所有的记录节点都是按键值大小顺序存放在同一层的叶节点中,叶节点间用指针相连,构成双向 循环链表,非叶节点(根节点.枝节点)只存放键值,不存放实际数据.下面看一个2

深入分析MySQL索引结构原理、性能分析与优化详解

第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料.关键字index --------------------- 唯一索引 强调唯一,就是索引值必须唯一,关键字unique index 创建索引: 1.create unique index 索引名 on 表名(列名); 2.alter table 表名 add unique index 索引名 (列名); 删除索引: 1.

MySQL中利用索引对数据进行排序的基础教程_Mysql

MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描.利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作.当索引的顺序与ORDER BY中的列顺序相同且所有的列是同一方向(全部升序或者全部降序)时,可以使用索引来排序.如果查询是连接多个表,仅当ORDER BY中的所有列都是第一个表的列时才会使用索引.其它情况都会使用filesort. MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度.

使用MYSQL索引

    关系数据库的世界是一个表与集合.表与集合上的运算占统治地位的世界.数据库是一个表的集合,而表又是行和列的集合.在发布一条SELECT 查询从表中进行检索行时,得到另一个行和列的集合.这些都是一些抽象的概念,对于数据库系统用来操纵表中数据的基本表示没有多少参考价值.另一个抽象概念是,表上的运算都同时进行:查询是一种概念性的集合运算,并且集合论中没有时间概念.当然,现实世界是相当不同的.数据库管理系统实现了抽象的概念,但是在实际的硬件    范围内要受到实际的物理约束.结牵檠ㄊ奔洌

mysql 索引B-Tree类型对索引使用的生效和失效情况详解

   当人们谈论索引的时候,如果没有特别指明类型 ,那多半说的是 B-Tree 索引,它使用B-Tree数据结构来存储数据.大多数 MySQL引擎都支持这种索引 .Archive引擎是 一个例外 :5.1 之前 Archive 不支持任何索引 ,直到 5.1 才开始支持单个自增列 ( A UTO INCREMENT ) 的索引. 我们使用术语"B-Tree " ,是因为 MySQL 在 CREATE TABLE 和其他语句中也使用该关键字 .   不过,底层的存储引擎也可能使用不同的存储结构,例

MySQL索引分析和优化

mysql|索引|优化 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为people的表: CREATE TABL

加速PHP动态网站 MySQL索引分析和优化

本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为peo