当前位置: 首页 > news >正文

济南环保行业网站开发服务器上构建企业网站

济南环保行业网站开发,服务器上构建企业网站,wordpress ppt插件,中国嘉兴门户网站一、背景 在我们日常工作中,我们可能会遇到一些慢SQL语句或者要对一些SQL进行性能优化,那么就需要使用explain对SQL进行执行计划分析了。Mysql中的执行计划可以通过EXPLAIN或DESCRIBE关键字获取,当我们拿到执行计划后可以帮助我们分析这条sq…

一、背景

在我们日常工作中,我们可能会遇到一些慢SQL语句或者要对一些SQL进行性能优化,那么就需要使用explain对SQL进行执行计划分析了。Mysql中的执行计划可以通过EXPLAIN或DESCRIBE关键字获取,当我们拿到执行计划后可以帮助我们分析这条sql执行的性能瓶颈在哪里。

例如,我有一张user表,我想分析一下查询的执行计划。

SELECT * FROM user WHERE age > 28;

可以使用EXPLAIN来获取这条sql语句的执行计划。

EXPLAIN SELECT * FROM user WHERE age > 28;

通过执行上面的EXPLAIN语句后,我们就能拿到这条sql的执行计划了。

+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table| partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | user | NULL       | range| age           | age  | 5       | NULL |    50|    33.33 | Using where |
+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------------+

接下来我们就可以对执行计划进行分析了。

二、执行计划分析

从上面的执行计划可以看到,一共有12个字段,我们先对这些字段依次介绍一下。

1. id 

执行计划中每个操作的唯一标识,对于执行计划中的每条sql,可能会有多个操作,每个操作都有一个唯一的id。

2. select_type

操作类型,一共包含一项几种类型:

  • SIMPLE:表示这个查询是最简单的形式,不包含任何的子查询或联合查询。
  • PRIMARY:表示查询中的最外层或最顶层SELECT,它内部可能会包含嵌套的子查询或其它复杂构造。
  • SUBQUERY:表示这种类型的SELECT出现在了另外一个查询的from字句或where字句查询中,作为独立的查询被执行。
  • DEPENDENT SUBQUERY:类似于SUBQUERY,这个子查询的执行依赖于外部查询的某一行,它会为外部查询的每一行执行一次。
  • DERIVED:表示MySQL需要创建一张临时表来存储子查询的结果。
  • UNCACHEABLE SUBQUERY:对于不能缓存结果的子查询,MySQL不能将它的值计算出来重复使用,而是在外部查询的时候每次都需要重新计算。
  • UNION :出现在UNION查询中的第二个或后续的查询语句。
  • UNION RESULT:用于合并UNION查询的结果集,不是实际的查询操作。
  • MATERIALIZED:Mysql8.0引入的新类型,表示子查询结果被物化为临时表,以便重复使用。
3. table

当前操作锁涉及的表。

4. partitions 

当前操作所涉及的分区。

5. type

表示MySQL在执行查询时所采用的检索方式,他是衡量查询性能的重要指标之一。以下时常用的类型和含义:

  • system:系统表,数据量很少,往往不需要进行磁盘IO。
  • const:表中仅有一行数据匹配,使用主键查询或唯一索引查询。
  • eq_ref:使用主键或者唯一约束列,进行关联查询时使用。
  • ref:非唯一索引扫描,只会扫描索引树中的一部分来查找匹配的行,使用非唯一索引进行查询时使用。
  • range:范围扫描,使用索引进行范围查询,只会扫描索引树中的一个范围来查找匹配的行。
  • index:全索引扫描,会遍历索引树来查找匹配的行。通常时不符合最左匹配的查询。
  • all:全表扫描,当使用非索引字段查询时,将会遍历全表来找到匹配的行。

故以上类型执行效率由高到低:system > const > eq_ref > ref > range > index > all

6. possible_keys 

表示查询中可以使用的索引,不一定实际使用了这些索引。这个字段列出了可能用于这个查询的所有索引,也包括联合索引。

7. key

表示实际查询使用的索引。

8. key_len

表示索引的长度,索引的长度越短,查询时的效率越高。

9. ref

用来表示哪些列或常量被用来与key列中命名的索引进行比较。

10. rows

表示操作需要扫描的行数,也就是说需要扫描表中多少行才能得到结果。

11. filtered

表示本次操作过滤掉的行数占扫描行数的百分比。值越大,则查询结果越准确。

12. extra

这个字段经常会被忽略,其实也很重要。这个字段表示MySQL在执行查询时所作的一些附加操作。下面是一些常见的extra类型及其含义:

  • Using where:表示查询的列未被索引覆盖,或where筛选条件非索引列,或者where筛选条件非索引的前导列。
  • Using index:本次查询使用了索引覆盖,只需要扫描索引,无需回表。
  • Using index condition:表示本次查询在索引上执行了部分条件过滤。
  • Using where;Using index:查询列被索引覆盖,并且where条件中使用了索引列,但不是索引的前导列。或者where条件是索引前导列的一个范围。通常是未遵循最左匹配原则。
  • Using filesort:表示MySQL将使用文件排序,而不是索引排序,通常发生在无法使用索引来进行排序。我们应当尽量避免这种情况。

三、总结

通过对执行计划的各个字段进行了分析和说明,我们在进行sql优化的时候,尽可能使用最优的方式来提高性能。

http://www.yayakq.cn/news/181334/

相关文章:

  • 专业做域名的网站关于做一动物网站的界面个
  • 搭建网站 网页做电容的网站
  • 上海网站建设百家号亚马逊跨境电商app
  • 乐清做网站公司王野天明星
  • 招聘网站开发实训报告增城网络推广
  • 网站团购功能怎么做三栏wordpress模板
  • 石家庄网站建设企业南京快速建站公司
  • 南京建行网站美工培训哪个机构好
  • 西部空间怎样上传网站超链接到网站怎么做
  • seo综合查询怎么进入网站wordpress tag 收录
  • 建设公共网站的手续创办一个网站多少钱
  • 手机搜索网站建设4s店建设网站的目的
  • 做暧嗳xo小视频网站杭州网站设计的公司
  • 茶网站源码全国十大代理记账公司
  • 上海手机网站建设报价表一个公司的网址是怎么样的
  • 苏州网站建设要多少钱张家港网站 设计制作
  • 台州招聘网站建设广州软件外包公司排名
  • 新闻类网站html模板免费下载湖北省建筑特种作业人员证书
  • 可以免费做中考题的网站矿泉水软文广告500字
  • 怎样做好网站建设设计wordpress 图文列表
  • 网站很卡如何优化素材大全
  • linux 国外网站湖北省建设规划网站
  • 做二手网站内容管理系统WordPress
  • 做游戏ppt下载网站有哪些微信软件定制开发
  • 广州建网站兴田德润可信wordpress 购物主题
  • 松江网站建设博客网站建设与维护试卷第九章
  • 网站模板设计邢台做网站企业
  • 用以前用过的域名做网站化妆品电商网站模板
  • 企业网站如何建设杭州网站建设icp备
  • 网站建设的具体方法wap网站有哪些