4.7 explain 之 Extra】的更多相关文章

explain结果中有一个Extra字段,对分析与优化SQL有很大的帮助 数据准备: create table user ( id int primary key, name varchar(20), sex varchar(5), index(name) )engine=innodb; insert into user values(1, 'shenjian','no'); insert into user values(2, 'zhangsan','no'); insert into use…
问题背景 最近用explain命令分析查询sql执行计划,时而能看到Extra中显示为"Using index"或者"Using where; Using Index",对这两者之间的明确区别产生了一些疑惑,于是通过网上搜索.自行实验探究了一番其具体区别. 测试数据准备 以下表作为测试表进行sql分析. CREATE TABLE `test_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `f0`…
导读 extra主要有是那种情况:Using index.Using filesort.Using temporary.Using where Using where无需多说,就是使用了where筛选条件. 数据准备: CREATE TABLE `t_blog` ( `id` int(11) NOT NULL auto_increment, `title` varchar(50) default NULL, `typeId` int(11) default NULL, `a` int(11) d…
using index :查找使用了索引,查询结果覆盖了索引 using where:查找使用了索引,不需要回表去查询所需的数据,查询结果是索引的一部分 using index condition:查找使用了索引,但是需要回表查询数据 using index & using where:查找使用了索引,不需要回表查询数据,查询结果覆盖了索引 看到这里的读者我劝你自己写个mysql例子,因为我在忘了看了三个博客是冲突的,就决定自己写了,现在应该是四个冲突了,等大神解决吧,我都不知道自己的例子对不对…
一.说明 包含不合适在其他列中显示,但十分重要的信息. 二.分类 a. Using filesort : 说明mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序排序进行读取的.mysql中无法利用索引完成的排序操作车称为 “ 文件排序 ”. b. Using temporary : 使用了临时表保存中间结果,mysql 在对查询结果排序的时候使用了临时表.常见于order by 和分组查询 group by. c. Using index : 表示相应的select操作中使用了…
Explain的type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题. Explain…
前记:很多东西看似简单,那是因为你并未真正了解它. Explain命令用于查看执行效果.虽然这个命令只能搭配select类型语句使用,如果你想查看update,delete类型语句中的索引效果,也不是太难的事情,只要保持条件不变,把类型转换成select就行了. explain的语法如下: explain [extended] select ... from ... where ... 如果使用了extended,那么在执行完explain语句后,可以使用show warnings语句查询相应的…
1.介绍 EXPLAIN 命令用于SQL语句的查询执行计划.这条命令的输出结果能够让我们了解MySQL 优化器(optimlzer)是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策. 下面执行连接查询语句 explain select * from goods_goods inner join goods_goodscategory on goods_goods.category_id = goods_goodscategory.id; 接下来我…
本文转载自最官方的 mysql explain type 字段解读 读了很多别人的笔记都杂乱不堪,很少有实例,什么都不如原装的好,所以当你读到我的笔记的时候如果觉得说的不明白,最好参考官方的手册. 我把官方的手册简单翻译了下,好多地方也还是不懂,网友补充,配合了官方的实例代码 更多请更多的参考 https://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain-join-types 下面的笔记是根据我自己的 mysql 服务的版…
原文地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 9.8.2 EXPLAIN Output Format The EXPLAIN statement provides information about the execution plan for a SELECT statement. EXPLAIN returns a row of information for each table used in the S…
8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优化 8.2.1.4 索引合并(Index Merge)优化 8.2.1.5 引擎Pushdown条件优化 8.2.1.6 索引条件Pushdown优化 8.2.1.7 使用索引扩展 8.2.1.8 IS NULL优化 8.2.1.9 LEFT JOIN和RIGHT JOIN优化 8.2.1.10 嵌…
6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段.这其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序.分组等.   在完成这些任务时,查询需要在不同的地方花费时间,包括网络.CPU计算.生成统计信息和执行计划.锁等待等操作,尤其是向底层存储引擎检索数据的调用操作,这些调用需要在内存操作.CPU操作和内存不足时导致的IO操作上…
创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效低使用索引的最左前缀列. 3. B-Tree索引:当人们谈论索引的时候,如果没有特别执行索引类型,那多半说是B-Tree索引,它使用B-Tree数据结构来存储数据.     1). 可以使用B-Tree索引的查询类型:          a. 全职匹配:全值匹配指的是和索引中…
开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据类型优化,索引优化,SQL优化三个角度考虑MySQL数据库优化问题,本次分享将从开发角度,看如何实现MySQL数据库优化. 本次分享大纲: 一个例子 数据类型优化 索引优化 SQL优化 一.一个例子 数据库需要处理的行数: 189444*1877*13482~~~479亿 如果在关联字段上…
HOW MYSQL USES INTERNAL TEMPORARY TABLES Table of Contents [hide] 1)UNION queries 2)Some views 3)SQL_SMALL_RESULT 4) Multiple-table UPDATE 5)Derived tables 6)subquery or semi-join 7)order by,group by,distinct 通过阅读MySQL的官方手册,我们可以知道出现下面情况的时候,MySQL可能会使用…
索引和锁可以让查询锁定更少的行.如果你的查询从不访问那些不需要访问的行,那么就会锁定更少的行,从两个方面来看这对性能都有好处.首先,虽然innodb的行锁效率很高,内存使用也很少,但是锁定行的时候仍然会带来额外的开销,其次,锁定超过需要的行会增加锁竞争,并减少并发性. innodb只有在访问行的时候才会对其加锁,而索引能够减少innodb访问的行数,从而减少锁的数量.但只有当innodb在存储引擎能够过滤掉不需要的行时才有效.如果索引无法过滤掉无效的行,那么在innodb检索到数据并返回给服务器…
通常大家都会根据查询的WHERE 条件来穿件合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE 条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可以使用索引来直接获取列的数据,这样就不再需要读取数据行.如果索引的叶子节点已经包含要查询的数据,那么还有什么必要再返回表查询呢?如果一个索引包含(或者覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”. 覆盖索引是非常有用的工具,能够极大的提高性能.考虑一下如果查询只需要索引而无需返回表,会…
看过一些人写的学习笔记,完全按书一字不漏照抄,内容很多,真不能叫笔记.遂自己整理了一份,取其精要. 更多笔记请访问@个人简书 [toc] 索引概述 索引即key 在存储引擎层实现,不同引擎工作方式不同 索引优化--最好的查询优化手段,可提效几个数量级 两步查找数据: 磁盘查找索引节点(页),将其调入内存: 内存内业内查找数据 一. 索引类型 B-Tree Hash R-Tree空间数据索引 全文索引 1. B-tree索引 支持引擎:InnoDB,MyISAM,Memory 所有叶子值顺序存储,…
转自http://www.cnblogs.com/112ba/p/6220650.html 数据类型 简单原则:更小更好,简单就好,避免NULL1)整型如int(10)括号中的值与存储大小无关2)实数decimal比float与double占用更大存储空间且CPU不能直接对decimal进行计算3)字符串列最大长度<=255varchar使用一字节保存长度,否则使用2字节.char(10)括号中是字符数,而不是字节数(字节数与列字符集相关).4)使用MYSQL的内建类型保存日期与时间,如date…
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/102 关于MySQL的loose index scan有几点疑问,欢迎看到这篇文章的人一起探讨. 测试表结构: CREATE TABLE `test` ( `id` int(11) NOT NULL default '0', `v1` int(10) unsigned NOT NULL default '0', `v2` int(10) unsigned NOT…
1.默认类型转换 CREATE TABLE `indextest` (`id` int(10)  AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`), ) explain select age from indextest where name=‘111222’ \G,显示的是使用索引idx_name 而使用explain select age from index…
1.用于不要使用select * from table xxx. 需要查询哪些列就在语句中指明,一个表结构复杂时,可能会有上百列,使用*来查询时会造成很大的浪费. 2.选择合适的属性及大小    例如邮政编码使用char(6)就要比varchar(255)合适的多,省份.性别定义为enum也会提高效率. 3.使用join来代替子查询 原因是MySQL将不用创建临时表来完成2步操作. select  name,age from a where id not in (select id from b…
1.explain分析explian引用索引基数show indexes from table_name;主键索引具有最好的基数 测试时 不走缓存SELECT SQL_NO_CACHE id from test_null; 2.更好的索引类型 索引列尽可能的为not null ,避免在可空的列索引上进行二次扫描 要尽量避免 NULL ,关于索引列为Null的是否走索引,见测试 索引列的值为null查询时走索引的情况3.使用unique index 与常规索引比不需要进行索引范围扫描4.使用pri…
1.1 MySQL逻辑架构 MySql服务器逻辑架构图 1.连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行.服务器会负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程. 当客户端(应用)连接到MySQL服务器时,服务器需要对其进行认证.认证基于用户名.原始主机信息和密码.一旦客户端连接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限. 2.优化与执行 MySql会解析查询…
去掉敏感信息后的不完整版 ==========================================================================2018年12月29日 记录: 目前在维护的最低PHP版本只有5.6了:1.5.6.39版本convert.quoted-printable-encode过滤器时核心的segfault错误imap扩展的错误phar扩展的错误,PharData类提供了一个访问和创建不可执行的tar和zip存档的高级接口5.6.38版本apac…
是某群的哥们义务翻译的,宣传一下,还没时间时间读,粗滤看了全部翻译完了300多页佩服 https://github.com/CMant/Mastering-MariaDB- 原地址:如果你需要读,请star一下 Mastering MariaDB 中文译本 原著:Federico Razzoli 译者:虫神 写在前面的话: 这个项目,姑且称之为项目吧,从去年10月份就开始了.当时官网挂的还是mariadb10.1.今年的4月份其实已经翻译完了,但是还需要大量的整理工作.断断续续的,持续到现在.截…
一.各种数据结构介绍 这一小节结合哈希表.完全平衡二叉树.B树以及B+树的优缺点来介绍为什么选择B+树. 假如有这么一张表(表名:sanguo): (1)Hash索引 对name字段建立哈希索引: 根据name字段值进行hash计算,定位到数组的下标,因为字段值所对应的数组下标是哈希算法随机算出来的,所以可能出现哈希冲突.其中每一个节点存储的是name字段值及对应的行数据地址,那么对于这样一个索引结构,现在来执行下面的sql语句:  select * from sanguo where name…
覆盖索引的定义: 如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’.即只需扫描索引而无须回表. 只扫描索引而无需回表的优点:    1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量.    2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多.    3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用    4.innodb的聚簇索引,覆…
1.sql防止注入 https://www.cnblogs.com/sevck/p/6733702.html 结果: C:\Users\ASUS\kuaigong3.6.5\lib\site-packages\pymysql\cursors.py:165: Warning: (1292, 'Truncated incorrect DOUBLE value: \'1 and nickname="AAA1"\'') (1, 'AAA', None, 1, 1, 0, 'c465299492…
1.索引可以包含一个或者多个列的值,如果索引包含多个列的值,列的顺序很重要,mysql只能高效地使用索引的最左列前缀列. 2.索引是在存储引擎层而非服务器层实现的. 3.B-tree索引的限制: 如果不是按照索引的最左列开始查找,则无法使用索引: 不能跳过索引中的列: 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查询. 4.哈希索引的限制: 哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免避免读取行: 哈希索引数据不是按索引值顺序储存的,所以也就无法用…