`

理解mysql_order by排序原理及优化

 
阅读更多
一、排序算法
   a.  一次扫描性能高,减少了io随机请求的次数
   b.  排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取
    c.  关联查询会产生临时表再进行order by

二、优化思路
   a.  尽量减少io的读取 max_length_for_sort_data  阀值设置
   b.  尽量使用有序排序输出。 运用覆盖索引、主键索引
   c.  控制select 字段数,不需要的字段没必要输入
   d.   …….

一次扫描算法(4.1版本以后支持)
     1)、根据条件取出所有字段信息
     2)、在sort_buffer中进行排序, 如果sort_buffer较小,产生临时表,在临时表存储排序结果
  选用一次排序扫描还是二次排序扫描, 需要根据参数来: max_length_for_sort_data
  如果取的值 大于 max_length_for_sort_data 设置的值,采用二次扫描。
   两个参数:
max_length_for_sort_data:  确定选用哪种扫描策略
sort_buffer:   排序过程中确定是否需要创建临时表存储排序结果。每个线程共享。

两次扫描算法
     1)、根据条件取出排序字段和行指针信息
     2)、在sort_buffer中进行排序, 如果sort_buffer较小,产生临时表,在临时表存储排序结果
     3)、根据排序结果的行号去主索引结构中获取数据
例如:select * from t where filed=‘abc’ order by field2
             此语句会经过2次扫描
             第1次搜索出符合条件的记录
             第2次根据行号去获取字段
           如果field字段上有索引,解析规则:use index, Using filesort
           如果field字段上没有索引,则解析规则:Using where; Using filesort
说明:order by与索引无关; (除覆盖索引除外)
分享到:
评论

相关推荐

    mysql_proc_page_order.zip_page_proc_page_排序MYSQL

    在MySQL数据库系统中,处理大量数据时,翻页与排序是常见的需求,这涉及到数据库查询的性能优化。本篇将详细解析标题“mysql_proc_page_order.zip_page_proc_page_排序MYSQL”所涵盖的知识点,以及如何在MySQL中实现...

    MySQL优化篇:排序分组优化.pdf

    关于group by分组优化,其优化原理与order by相似。group by语句通常用于分组统计,例如按照某个字段对数据进行分组,并对每组数据进行聚合计算。如果group by的字段上有索引,可以显著提高分组效率。 在进行MySQL...

    尚硅谷Java视频教程_MySQL高级视频

    尚硅谷_MySQL高级_为排序使用索引OrderBy优化 · 49.尚硅谷_MySQL高级_慢查询日志 · 50.尚硅谷_MySQL高级_批量插入数据脚本 · 51.尚硅谷_MySQL高级_用Show Profile进行sql分析 · 52.尚硅谷_MySQL高级_全局...

    MYSQL order by排序与索引关系总结1

    MySQL中的ORDER BY排序与索引关系是数据库性能优化的关键因素之一。本文主要针对InnoDB存储引擎的B-Tree索引进行探讨,不涉及索引设计,而是关注如何有效利用索引来提升查询性能。 首先,遵循**最左前缀法则**是...

    mysql_Query优化

    #### 五、JOIN 实现原理及优化思路 **5.1 JOIN 的基本概念** JOIN 操作用于合并两个或多个表中的行。根据连接条件的不同,JOIN 可分为 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN 等。 **5.2 JOIN 的...

    mysql高级视频教程百度云(2019).txt

    48.MySQL高级_为排序使用索引OrderBy优化.avi 47.MySQL高级_in和exists.avi 46.MySQL高级_小表驱动大表.avi 45.MySQL高级_索引优化答疑补充和总结口诀.avi 44.MySQL高级_索引面试题分析.avi 43.MySQL高级...

    mysql_cn_sc.rar_mysql 中文_mysql手册_sql mysql

    此外,还有更高级的SQL特性,如联接(JOIN)、子查询、聚合函数(COUNT, SUM, AVG等)、分组(GROUP BY)和排序(ORDER BY)等。 MySQL支持多种存储引擎,如InnoDB(支持事务处理和外键)、MyISAM(快速读取但不...

    MySQL Order By索引优化方法

    总之,理解`ORDER BY`和`GROUP BY`的索引优化策略,以及如何通过`EXPLAIN`分析查询计划,可以帮助我们有效地优化查询,避免不必要的`filesort`操作,从而提升MySQL数据库的性能。在设计索引时,应考虑查询语句的常见...

    activiti5.9修复mysql order by 排序bug

    activiti5.9修复mysql order by 排序bug 详情见博客地址:http://blog.csdn.net/qq413041153/article/details/7740773#comments

    《数据库原理及应用_MySQL》实验任务及指导书.docx

    数据库原理及应用_MySQL 实验任务及指导书 MySQL 是一种流行的关系数据库管理系统(RDBMS),广泛应用于各种 Web 应用程序和企业级应用程序。MySQL 的实验任务及指导书旨在帮助学生掌握 MySQL 的基础知识和基本...

    mysql如何根据汉字首字母排序

    select areaName from area order by convert(areaName USING gbk) COLLATE gbk_chinese_ci asc 说明:areaName为列名 area为表名 PS:这里再为大家推荐一款本站的相关在线工具供大家参考: 在线中英文根据首字母...

    mysql_help.zip_MYSQL_Variety_crowdpsr

    - `SELECT`语句用于查询数据,可以使用`WHERE`子句进行条件筛选,`GROUP BY`和`HAVING`用于分组和过滤,`ORDER BY`进行排序,`LIMIT`用于限制返回结果的数量。 - `JOIN`操作用于合并多个表的数据,如INNER JOIN, ...

    MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT

    MySQL.rar_MYSQL_mysql 演示

    同时,`SELECT`语句是查询数据的核心,可以通过各种条件和操作符(如WHERE、GROUP BY、HAVING、ORDER BY等)来过滤和排序结果。 在数据库操作中,索引也是关键一环。MySQL允许为列创建索引以加速查询,例如,可以...

    深入解析mysql中order by与group by的顺序问题

    mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...

    MYSQLS_fortjoq_MYSQL_

    另外,`SELECT`语句是SQL中最强大的部分,用于从数据库中检索数据,可以配合`WHERE`子句进行条件筛选,使用`GROUP BY`和`HAVING`进行分组过滤,以及`ORDER BY`进行排序。 "Studentsys.sql"文件可能包含了一个具体的...

    MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法

    在MySQL查询语句过程和EXPLAIN语句基本概念及其优化中介绍了EXPLAIN语句,并举了一个慢查询例子: 可以看到上述的查询需要检查1万多记录,并且使用了临时表和filesort排序,这样的查询在用户数快速增长后将成为噩梦...

    MySQL.rar_MYSQL_Mysql入门

    7. 数据查询:深入理解JOIN操作,子查询,聚合函数(COUNT、SUM、AVG、MAX、MIN),排序(ORDER BY)、分组(GROUP BY)和筛选(HAVING)。 四、数据库设计 8. 第三方范式:了解第一范式(1NF)、第二范式(2NF)、...

    MySQL Order By用法分享

    MySQL中的`ORDER BY`语句是用来对查询结果进行排序的关键字。在数据库操作中,有时候我们需要根据特定字段的值来组织数据,`ORDER BY`就提供了这样的功能。本篇文章将通过具体的实例,深入讲解`ORDER BY`的用法。 ...

    mysql_MYSQL_

    - `ORDER BY 列名 [ASC|DESC];`:对结果进行排序,ASC表示升序,DESC表示降序。 - `GROUP BY 列名;`:根据指定列进行分组。 - `HAVING 条件;`:在分组后筛选数据。 - `INSERT INTO 表名 (列名1, 列名2) VALUES (值1,...

Global site tag (gtag.js) - Google Analytics