MYSQL 性能分析器 EXPLAIN 用法实例分析_Mysql

来源:脚本之家  责任编辑:小易  

一、sqlserver优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言(XML)的核心支持以及在Internet上和防火墙外进行查询的能力;缺点:开放性:SQL Server 只能windows上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库;伸缩性并行性:SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限;安全性:没有获得任何安全证书。性能:SQL Server 多用户时性能佳;客户端支持及应用模式:客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接;使用风险:SQL server 完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容;二、MySql优点:体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySql能很容易充分利用CPU;MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;支持ODBC for Windows,支持所有的ODBC 2.5函数和其他许多函数,可以用Access连接MySql服务器,使得应用被扩展;支持大型的数据库,可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上;缺点:不支持热备份;MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费、Unix或Linux 第三方安装 收费www.zgxue.com防采集请勿采集本网。

本文实例讲述了MYSQL 性能分析器 EXPLAIN 用法。分享给大家供大家参考,具体如下:

SQLSERVER 就用自带的查询分析器登录了:)两者的前提是数据库服务都带打开,而且你得知道安装时的用户名密码哦:) 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQLServer。这

使用方法:

EMS SQL Manager for MySQL是一款高性能MySQL数据库服务器系统的管理和开发工具。它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括:查看、存储规程和函数、InnoDB外部键字和其他

EXPLAIN SELECT * FROM user;

oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等 mysql的诊断调优方法较少,主要有慢查询日志。十一、权限与安全 mysql的用户与主机有关,感觉

环境和数据准备

查询分析器,直接用explain命令就好。explain select*from table1 where some=\"xxxx;SQLyog和Navicat Premium,都是mysql客户端。

-- 查看 MySQL 版本SELECT VERSION(); -- MySQL 提供什么存储引擎SHOW ENGINES; -- 查看默认存储引擎SHOW VARIABLES LIKE '%storage_engine%';

1、《MySQL技术内幕:InnoDB存储引擎》 全书首先全景式地介绍了MySQL独有的插件式存储引擎,分析了MySQL的各 种存储引擎的优势和应用环境。参考资料:百度百科—MySQL技术内幕:InnoDB存储引擎

 输出结果:

 id:输出的是整数,用来标识整个 SQL 的执行顺序。id 如果相同,从上往下依次执行id不同;id 值越大,执行优先级越高,越先被执行;如果行引用其他行的并集结果,则该值可以为NULL

select_type:[查询类型]

SIMPLE:简单的 SELECT 查询,没有 UNION 或者子查询,包括单表查询或者多表 JOIN 查询

PRIMARY: 最外层的 select 查询,常见于子查询或 UNION 查询 ,最外层的查询被标识为 PRIMARY

UNION:UNION 操作的第二个或之后的 SELECT,不依赖于外部查询的结果集(外部查询指的就是 PRIMARY 对应的 SELECT)

DEPENDENT UNION:UNION 操作的第二个或之后的 SELECT,依赖于外部查询的结果集

UNION RESULT:UNION 的结果(如果是 UNION ALL 则无此结果)

SUBQUERY:子查询中的第一个 SELECT 查询,不依赖于外部查询的结果集

DEPENDENT SUBQUERY:子查询中的第一个select查询,依赖于外部查询的结

DERIVED:派生表(临时表),常见于 FROM 子句中有子查询的情况

注意:MySQL5.7 中对 Derived table 做了一个新特性,该特性允许将符合条件的 Derived table 中的子表与父查询的表合并进行直接JOIN,从而简化简化了执行计划,同时也提高了执行效率;默认情况下,MySQL5.7 中这个特性是开启的,所以默认情况下,上面的 SQL 的执行计划应该是这样的

MATERIALIZED:被物化的子查询,MySQL5.6 引入的一种新的 select_type,主要是优化 FROM 或 IN 子句中的子查询,更多详情请查看:Optimizing Subqueries with Materialization

UNCACHEABLE SUBQUERY:对于外层的主表,子查询不可被缓存,每次都需要计算

UNCACHEABLE UNION:类似于 UNCACHEABLE SUBQUERY,只是出现在 UNION 操作中

SIMPLLE、PRIMARY、SUBQUERY、DERIVED 这 4 个在实际工作中碰到的会比较多,看得懂这 4 个就行了,至于其他的,碰到了再去查资料就好了

table:显示了对应行正在访问哪个表(有别名就显示别名),还会有 <union2,3> 、 <subquery2> 、 <derived2> (这里的 2,3、2、2 指的是 id 列的值)类似的值

partitions:查询进行匹配的分区,对于非分区表,该值为NULL。大多数情况下用不到分区,所以这一列我们无需关注

type:

关联类型或者访问类型,它指明了 MySQL 决定如何查找表中符合条件的行,这是我们判断查询是否高效的重要依据,完整介绍请看:explain-join-types

system:该表只有一行(=系统表),是 const 类型的特例

const:确定只有一行匹配的时候,mysql 优化器会在查询前读取它并且只读取一次,速度非常快。用于 primary key 或 unique 索引中有常亮值比较的情形

eq_ref:对于每个来自于前面的表的行,从该表最多只返回一条符合条件的记录。当连接使用的索引是 PRIMARY KEY 或 UNIQUE NOT NULL 索引时使用,非常高效

ref:索引访问,也称索引查找,它返回所有匹配某个单个值的行。此类型通常出现在多表的 JOIN 查询, 针对于非 UNIQUE 或非 PRIMARY KEY, 或者是使用了最左前缀规则索引的查询,换句话说,如果 JOIN 不能基于关键字选择单个行的话,则使用ref

fulltext:当使用全文索引时会用到,这种索引一般用不到,会用专门的搜索服务(solr、elasticsearch等)来替代

ref_or_null:类似ref,但是添加了可以专门搜索 NULL 的行

这个是有前提条件的,前提为 weapon 列有索引,且 weapon 列存在  NULL 

index_merge:该访问类型使用了索引合并优化方法

这个同样也是有条件的, id 列和 weapon 列都有单列索引。如果出现 index_merge,并且这类 SQL 后期使用较频繁,可以考虑把单列索引换为组合索引,这样效率更高

unique_subquery:类似于两表连接中被驱动表的 eq_ref 访问方式,unique_subquery 是针对在一些包含 IN 子查询的查询语句中,如果查询优化器决定将 IN 子查询转换为 EXISTS 子查询,而且子查询可以使用到主键或者唯一索引进行等值匹配时,则会使用 unique_subquery

index_subquery:index_subquery 与 unique_subquery类似,只不过访问子查询中的表时使用的是普通的索引

range:使用索引来检索给定范围的行,当使用 =、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,则会使用 rang,前提是必须基于索引,也就是 id 上必须有索引

index:当我们可以使用索引覆盖,但需要扫描全部的索引记录时,则会使用 index;进行统计时非常常见

ALL:我们熟悉的全表扫描

possible_keys:展示在这个 SQL 中,可能用到的索引有哪些,但不一定在查询时使用。若为空则表示没有可以使用的索引,此时可以通过检查 WHERE 语句看是否可以引用某些列或者新建索引来提高性能

key:展示这个 SQL 实际使用的索引,如果没有选择索引,则此列为null,要想强制 MySQL 使用或忽视 possible_keys 列中的索引,在查询中使用 FORCE INDEX、USE INDEX 或者I GNORE INDEX

key_len:展示 MySQL 决定使用的键长度(字节数)。如果 key 是 NULL,则长度为 NULL。在不损失精确性的情况下,长度越短越好

ref:展示的是与索引列作等值匹配的东东是个啥,比如只是一个常数或者是某个列。它显示的列的名字(或const),此列多数时候为 Null

rows:展示的是 mysql 解析器认为执行此 SQL 时预计需要扫描的行数。此数值为一个预估值,不是具体值,通常比实际值小

filtered:展示的是返回结果的行数所占需要读到的行(rows 的值)的比例,当然是越小越好啦

extra:

表示不在其他列但也很重要的额外信息。取值有很多,我们挑一些比较常见的过一下

using index:表示 SQL 使用了使用覆盖索引,而不用回表去查询数据,性能非常不错

using where:表示存储引擎搜到记录后进行了后过滤(POST-FILTER),如果查询未能使用索引,using where 的作用只是提醒我们 mysql 要用 where 条件过滤结果集

using temporary:表示 mysql 需要使用临时表来存储结果集,常见于排序和分组查询

using filesort:表示 mysql 无法利用索引直接完成排序(排序的字段不是索引字段),此时会用到缓冲空间(内存或者磁盘)来进行排序;一般出现该值,则表示 SQL 要进行优化了,它对 CPU 的消耗是比较大的

impossible where:查询语句的WHERE子句永远为 FALSE 时将会提示该额外信息

当然还有其他的,不常见,等碰到了大家再去查吧!!!

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总

希望本文所述对大家MySQL数据库计有所帮助。

查询分析器,直接用explain命令就好。explain select*from table1 where some="xxxx;SQLyog和Navicat Premium,都是mysql客户端内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mysql查询优化之explain的深入解析
  • mysql中explain用法详解
  • mysql性能分析及explain的使用说明
  • mysql中通过explain如何分析sql的执行计划详解
  • mysql之explain使用详解(分析索引)
  • 详解mysql中explain解释命令及用法讲解
  • mysql中执行计划explain命令示例详解
  • mysql中explain命令详解
  • mysql开启慢查询(explain sql语句使用介绍)
  • mysql优化利器之explain使用介绍
  • mysql explain的用法(使用explain优化查询语句)
  • mysql 5.0.16乱码问题的解决方法
  • linux忘记mysql密码处理方法
  • mysql 8.0.20 安装配置方法图文教程
  • mysql生产库insert了2次同样的记录但是主键id是不一样的问题的分
  • mysql 清除表空间碎片的实例详解
  • mysql 存储过程传参数实现where id in(1,2,3,...)示例
  • win10下mysql 5.7.23 winx64安装配置方法图文教程
  • mysql关联子查询的一种优化方法分析
  • linux 下配置安装mysql以及配置【经验】
  • mysql删除数据库的两种方法
  • mysql有哪些好用的查询分析器大家推荐下
  • SQL Server 与 MySQL 性能相差多大
  • mysql中有用来分析存储过程的工具吗?
  • 谁能帮我分析一下并推荐一个有效的分析工具啊
  • SQL Server数据库和MySQL数据库有什么区别
  • 哪位高手可以推荐几款通用的数据库管理工具
  • mysql和oracle的区别
  • 哪些好用的mysql数据查询分析工具
  • MySQL有什么推荐的学习书籍
  • sql查询分析器是什么?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysqlmysql查询技巧大全mysql事务操作技巧汇总mysql存储过程技巧大全mysql数据库锁相关技巧汇总mysql常用函数大汇总mysql查询优化之explain的深入解析mysql中explain用法详解mysql性能分析及explain的使用说明mysql中通过explain如何分析sql的执行计划详解mysql之explain使用详解(分析索引)详解mysql中explain解释命令及用法讲解mysql中执行计划explain命令示例详解mysql中explain命令详解mysql开启慢查询(explain sql语句使用介绍)mysql优化利器之explain使用介绍mysql explain的用法(使用explain优化查询语句)mysql 5.0.16乱码问题的解决方法linux忘记mysql密码处理方法mysql 8.0.20 安装配置方法图文教程mysql生产库insert了2次同样的记录但是主键id是不一样的问题的分mysql 清除表空间碎片的实例详解mysql 存储过程传参数实现where id in(1,2,3,...)示例win10下mysql 5.7.23 winx64安装配置方法图文教程mysql关联子查询的一种优化方法分析linux 下配置安装mysql以及配置【经验】mysql删除数据库的两种方法mysql安装图解 mysql图文安装教程can""""t connect to mysql servwindows下mysql5.6版本安装及配置mysql字符串截取函数substring的mysql创建用户与授权方法mysql提示:the server quit withmysql——修改root密码的4种方法mysql日期数据类型、时间类型使用mysql update语句的用法详解mysql 的case when 语句使用说明centos7.5 安装 mysql8.0.19的教程图文详mysql 视图的基础操作(五)详解mysql存储过程参数有三种类型(in、oupython版mysql爆破小脚本mysql创建和删除表操作命令实例讲解一个简单的mysql备份shell脚本mysql笔记之触发器的应用mysql数据库数据拆分之分库分表总结mysql 5.7.16 免安装版安装配置方法图文教mysql性能优化的最佳20+条经验
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved