首页 > 数据库 >MySQL之order by优化

MySQL之order by优化

时间:2023-07-21 17:45:16浏览次数:39  
标签:索引 age phone user MySQL 排序 优化 order

MySQL之order by优化

  1. .Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫 FileSot 排序。

  2. Using index:通过有序索引顺序扫描直接返回有序数据,这种情况即为 using index,不需要额外排序,操作效率高。

 #没有创建索引时,根据age, phone进行排序
 explain select id,age,phone from tb_user order by age , phone;
 #创建索引
 create index idx user age phone aa on tb_user(age,phone):
 #创建索引后,根据age,phone进行升序排序
 explain select id,age,phone from tb_user order by age , phone;
 #创建索引后,根据age,phone进行降序排序
 explain select id,age,phone from tb_user order by age desc , phone desc;



因为创建值的时候都是升序排的。如下图




创建age asc , phone desc索引后,再查age asc和phone desc速度会变快


 #根据age,phone进行降序一个升序,一个降序
 explain select id,age,phone from tb_user order by age asc , phone desc;
 #创建索引
 create index idx user age_phone ad on tb_user(age asc ,phone desc);
 #根据age,phone进行降序一个升序,一个降序
 explain select id,age,phone from tb_user order by age asc , phone desc;


查找select * 时,*中有的没有建立索引,因此需要回表查询,性能降低,因此尽量使用覆盖查询,就是查询使用了索引,并且返回列在索引中都可以找到,不需要回表查询。


order by优化

  1. 根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则。

  2. 尽量使用覆盖索引。

  3. 多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则 (ASC/DESC)。

  4. 如果不可避免的出现filesort,大数据量排序时,可以适当增大排序缓冲区大小 sort_buffer_size(默认256k)。

 #查询缓冲区大小
 show variables like "sort_buffer_size';


标签:索引,age,phone,user,MySQL,排序,优化,order
From: https://www.cnblogs.com/liandaozhanshi/p/17572069.html

相关文章

  • MySQL之插入优化
    MySQL之插入优化insert优化原批量插入:insertintotb_testvalues(1,'tom');insertintotb_testvalues(2,'cat');insertintotb_testvalues(3,'jerry');改批量插入:insertintotb_testvalues(1,'Tom'),(2,'Cat'),(3,'Jer......
  • Mysql 命令行方式导出数据文件
    概述Linux服务器上有一个数据库表包含大于50亿条的记录,通过Navicat等数据迁移工具,将数据迁移到另一个服务器相同表中,总是执行一段时间后卡死,故选择先导出数据文件,再去另一个服务器导入该文件。可以使用Navicat导出数据文件,也可以使用MySQL支持的命令导出数据文件。本文章介绍如何使......
  • 递归优化策略(数组存储)
    优化原因:有重复计算解决方案:用数组记录下一些会重复用到的数据,方便直接调用eg(虽然此题不适用)longlongpell(intm){if(m==1){return1;}elseif(m==2){return2;}elseif(a[m]!=0)//判断是否算过{returna[m];//算过的话直接调......
  • 索引的优化
    如下一.索引的优化1.在经常查询而不经常增删改的操作的字段加索引。2.Orderby和groupby后面的字段应该是索引字段。3.索引字段长度不应该很长。二.会导致索引丢失,在开发中尽量避免出现1.where子句中使用like关键字时,前置百分号会导致索引失效。2.where子句中使用is......
  • mysql id自增默认值
    MySQLID自增默认值在MySQL中,我们经常会使用自增的ID作为表的主键,以确保每个记录都有一个唯一的标识符。MySQL提供了一种方式来自动为这些ID生成唯一的值,即使用自增默认值。本文将介绍MySQL中的自增默认值的使用方法,并提供一些代码示例。什么是自增默认值自增默认值是一种特殊的......
  • mysql host 多个
    MySQL主机多个的使用方法MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种Web应用程序中。在某些情况下,我们可能需要连接多个MySQL主机,这种情况下可以使用多个主机来提高应用程序的性能、可用性和可扩展性。本文将介绍如何在应用程序中使用多个MySQL主机。为什么使用多个M......
  • MySql 终端常用指令
    1、开发环境:Window10+mysql-8.0.33-win642、管理员模式打开终端3、登录数据库(停止+开启+登录),具体指令参考MySql安装篇 4、操作数据库相关功能1)查看数据库列表:showdatabases;主要用于显示当前存在的数据库2)创建数据库:createdatabasedb_dev;其......
  • 使用prometheus+grafana监控Linux和Mysql
    整个监控系统分为三部分:prometheus,grafana,xxxx_exporter(各种类型的数据采集器,在本例中就是node_exporter,mysqld_exporter)1、在主监控服务器上安装prometheus作为主服务2、在主监控服务器上安装grafana用于界面展示3、在需要监控的服务器安装xxxx_exporter用于采集数据并提供......
  • mysql 根据in 传参排序
    MySQL根据IN传参排序在MySQL中,我们经常需要根据给定的一组值来进行排序操作。而IN关键字正是用来筛选出一组指定值的数据。本文将详细介绍如何在MySQL中使用IN传参进行排序。什么是IN关键字IN关键字是MySQL中的一个操作符,用于指定一个值是否在一个指定的范围内。其基本语法如下:......
  • mysql 替代
    替代MySQL数据库的步骤对于刚入行的开发者来说,学习和使用新的技术可能是一项具有挑战性的任务。本文将向你介绍如何替代MySQL数据库,并提供详细的步骤和代码示例,以帮助你顺利完成这个任务。步骤下面的表格展示了替代MySQL数据库的步骤。步骤描述1选择一个替代M......