广告
返回顶部
首页 > 资讯 > 数据库 >如何优化SQL
  • 280
分享到

如何优化SQL

2024-04-02 19:04:59 280人浏览 安东尼
摘要

这篇文章主要介绍了如何优化sql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介虽然使用Explain不能够马上调优我们的SQL,它也不能

这篇文章主要介绍了如何优化sql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

简介

虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解Mysql 优化器是如何执行SQL 语句的

通过Explain,我们可以分析出以下结果:

  • 表的读取顺序

  • 数据读取操作的操作类型

  • 哪些索引可以使用

  • 哪些索引被实际使用

  • 表之间的引用

  • 每张表有多少行被优化器查询

Explain命令的用法十分简单, 在 select语句前加上 Explain 就可以了, 例如:

explain select * from user;

它的结果主要包含以下字段

id、select_type、table、partitions、type、possible_keys、key、ref、rows、filtered、extra

接下来我们来看一下各个字段的含义

id 查询序列号

加载表的顺序

如何优化SQL

连接查询各个表的加载顺序是相同的,所以都为1

如何优化SQL

包含子查询的时候,先执行子查询,所以user表的id值最大

select_type 查询类型

常用取值有:

  • SIMPLE:简单的select查询,不包含子查询和索引

  • PRIMARY:查询中若包含任何子查询,最外层查询则为记为PRIMARY

  • SUBQUERY:在SELECT或WHERE列表中包含了子查询

  • DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),mysql递归执行这些子查询,把结果放在临时表中

  • UNION:若第二个SELECT出现在索引之后,则被标记为UNION:若索引包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED

  • UNION RESULT:从索引表获取结果的查询

table查询涉及的表或衍生表

type查询类型

通过 type 字段, 我们可以判断此次查询是全表扫描还是索引扫描等,type 常用的取值有:

system:表只有一条数据

const:针对主键或唯一索引的等值查询扫描, 简单理解为一次读取就获取到了数据,例如下面这个主键索引的查询

如何优化SQL

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

ref:非唯一性索引扫描,返回匹配某个单独值的所有行

range:表示使用索引范围查询,例如=、<>、>、>=、<、<=、IS、 NULL、<=>、BETWEEN、IN等

index: 所要查询的数据直接在索引树中就可以获取到, 而不需要扫描数据,例如:

如何优化SQL

ALL: 表示全表扫描, 这个类型的查询是性能最差的查询

type 类型的性能比较

通常来说, 不同的 type 类型的性能关系如下:

ALL < index < range < ref < eq_ref < const < system

possible_keys查询时能够使用到的索引.

possible_keys 表示 MySQL 在查询时, 能够使用到的索引. 注意并不是一定用,实际使用是由 由 key 字段决定

key 查询使用的索引

此字段是 MySQL 在当前查询时所真正使用到的索引.

key_len使用索引的字节数

这个字段可以评估组合索引是否完全被使用, 或只有最左部分字段被使用到.

rows MySQL估算要查找到结果集需要扫描读取的数据行数

Extra额外的信息

常见的有以下几种内容:

  • Using filesort:MySQL 需额外的排序操作, 不能通过索引顺序达到排序效果. 一般有 Using filesort, 都建议优化去掉, 因为这样的查询 CPU 资源消耗大.

  • Using index:表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错

  • Using temporary:查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.

  • Using where:表明使用了where过滤

  • Using join buffer:表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些

  • impossible where:where子句的值总是false,不能用来获取任何元组

  • select tables optimized away:在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化

  • distinct:优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

感谢你能够认真阅读完这篇文章,希望小编分享的“如何优化SQL”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: 如何优化SQL

本文链接: https://www.lsjlt.com/news/55666.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何优化SQL
    这篇文章主要介绍了如何优化SQL,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介虽然使用Explain不能够马上调优我们的SQL,它也不能...
    99+
    2022-10-18
  • SQL如何优化
    这篇文章主要介绍SQL如何优化,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、存在问题经过sql慢查询的优化,我们系统中发现了以下几种类型的问题:1.未建索引:整张表没有建索引;2...
    99+
    2022-10-18
  • 【MySQL】sql如何优化?
    一、优化步骤 (1)通过SQL监控、请求、日志等找出耗时的SQL语句; (2)使用Explain方式查看SQL耗时的具体原因; (3)根据实际情况解决:索引、缓存、左右连接 二、Explain select_type:简单查询or复杂查询?...
    99+
    2023-09-16
    sql mysql 数据库
  • 如何实现SQL优化
    这篇文章主要介绍“如何实现SQL优化”,在日常操作中,相信很多人在如何实现SQL优化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现SQL优化”的疑惑有所帮助!接下来,...
    99+
    2022-10-18
  • 如何优化SQL语句
    这篇文章主要介绍“如何优化SQL语句”,在日常操作中,相信很多人在如何优化SQL语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何优化SQL语句”的疑惑有所帮助!接下来,...
    99+
    2022-10-18
  • 如何优化SQL查询
    本篇文章给大家分享的是有关如何优化SQL查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们致力于打造能够较好运行并延续较长一段时间的que...
    99+
    2022-10-19
  • Flask中如何优化SQL
    这篇文章主要介绍“Flask中如何优化SQL”,在日常操作中,相信很多人在Flask中如何优化SQL问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask中如何优化SQL”...
    99+
    2022-10-19
  • SQL优化
    对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。          2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进...
    99+
    2018-09-04
    SQL优化
  • 如何给SQL做个优化
    本篇内容主要讲解“如何给SQL做个优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何给SQL做个优化”吧!SQL 语句执行较慢的 3 个原因没有建立索引,或...
    99+
    2022-10-18
  • SQL SERVER中SQL优化
    Sqlserver中尝试了一个开发的写法 实现功能是扫描当前每条记录时,把下一条记录合并到当前行。 用自关联CURR.RN = NEXT.RN +1(能找下一条)的方式查找时30万的数据...
    99+
    2022-10-18
  • 如何解析MySQL性能优化中的SQL优化
    如何解析MySQL性能优化中的SQL优化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。注:以 MySQL 为背景,很多内容同时适用于其他关系型...
    99+
    2022-10-19
  • 如何进行SQL优化中的limit分页优化
    如何进行SQL优化中的limit分页优化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。示例 表aaaaa中共有2375690数据。优化前的S...
    99+
    2022-10-19
  • mysql的sql语句如何优化
    要优化MySQL的SQL语句,可以采取以下几个方法:1. 使用索引:使用适当的索引可以大大提高查询性能。可以使用`EXPLAIN`命...
    99+
    2023-09-27
    mysql sql
  • 如何在SQL Server中优化Tempdb
    SQL Server默认有四个数据库系统,其中一个称为tempdb。 tempdb用于许多SQL操作,包括创建用户定义的临时对象,内部临时对象和版本存储,以及其他功能,如联机重新索引,多个活动记录...
    99+
    2022-10-18
  • 如何优化SQL Server服务器
    如何优化SQL Server服务器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  1.数据和日志文件分开存放在不同磁盘上  数据文件和日志文...
    99+
    2022-10-18
  • sql分页查询如何优化
    优化 SQL 分页查询的方法有很多,以下是一些常见的优化策略:1. 使用索引:为要查询的列创建合适的索引,可以大大提高查询速度。尤其...
    99+
    2023-09-20
    sql
  • 如何理解SQL Server SQL性能优化中的参数化
    如何理解SQL Server SQL性能优化中的参数化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库参数化的模式数据库的...
    99+
    2022-10-19
  • sql语句查询慢如何优化
    优化 SQL 查询性能的方法有很多,以下是一些常见的优化技巧:1. 索引优化:使用适当的索引可以大大提高查询性能。考虑创建索引以支持...
    99+
    2023-09-27
    sql
  • 在MySQL中如何优化SQL语句
    这篇文章主要介绍“在MySQL中如何优化SQL语句”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在MySQL中如何优化SQL语句”文章能帮助大家解决问题。1.概述在应用系统开发过程中,由于初期数据量...
    99+
    2023-06-29
  • 如何优化sql中的orderBy语句
    目录全字段排序RowId 排序orderby的优化总结在使用数据库进行数据查询时,难免会遇到基于某些字段对查询的结果集进行排序的需求。在sql中通常使用orderby语句来实现。将需要排序的字段放到 该关键词后,如果有多...
    99+
    2022-09-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作