mysql explain的利用(优化查询)上海时时乐走势图

 

  • simple 它象征简单的select,未有union和子查询
  • primary 最外面包车型大巴select,在有子查询的话语中,最外侧的select查询就是primary
  • union union语句的第贰个或然说是后边那些.
  • dependent union    UNION中的第四个或前面的SELECT语句,决定于外面包车型大巴询问
  • union result        UNION的结果
explain select * from user where id = 1

extra:关于mysql怎样分析查询的额外新闻。using temporary和using filesort是最差的情事,意思mysql根本不可能动用索引,结果是搜索会相当的慢

 ---- ------------- ------- ------- ------------------ --------- --------- ------- ------ ------- 
| id | select_type | table | type  | possible_keys    | key     | key_len | ref   | rows | Extra |
 ---- ------------- ------- ------- ------------------ --------- --------- ------- ------ ------- 
| 1  | SIMPLE      | user  | const | PRIMARY,id_unidx | PRIMARY | 4       | const | 1    |       |
 ---- ------------- ------- ------- ------------------ --------- --------- ------- ------ ------- 

1、创建数据库

const:表中的一个记录的最大值能够协作那个查询(索引能够是主键或惟一索引)。因为独有一行,这一个值实际就是常数,因为mysql先读这么些值然后把它充作常数来对待

  • const:表最多有二个相称行,const用于相比较primary key 也许unique索引。因为只特别一行数据,所以高速记住一定是用到primary key 或然unique
  • eq_reg:mysql手册是那样说的:"对于各个来自于前方的表的行组合,从该表中读取一行。那大概是最佳的对接类型,除了const类型。它用在一个索引的具备片段被接通使用况兼索引是UNIQUE或P普拉多IMA途观Y KEY"。eq_ref能够用来接纳=比较带索引的列。
  • ref:ref 对于各类来自于前方的表的行组合,全数有相称索引值的就要从那张表中读取。若是连接只使用键的最左边的前缀,或如若键不是UNIQUE或P路虎极光IMA索罗德Y KEY(换句话说,假如连接无法依赖关键字接纳单个行的话),则应用ref。纵然使用的键仅仅匹配一些些行,该联接类型是理所当然的。
  • range:给定范围内的搜索,使用二个索引来检查行。
  • index :该联接类型与ALL一样,除了唯有索引树被围观。这日常比ALL快,因为索引文件平时比数据文件小。(约等于说即使all和Index都以读全表,但index是从索引中读取的,而all是从硬盘中读的)
  • ALL  对于每一个来自于在此以前的表的行组合,进行完全的表扫描。若是表是首先个没标识const的表,那常常不好,何况普通在它情形下差。平常能够扩大更加的多的目录而不要使用ALL,使得行能基于前边的表中的常数值或列值被搜寻出。

not exists: mysql优化了left join,一旦它找到了相配left join规范的行,就不再找寻了

using temporary 看见这么些的时候,查询须求优化了。这里,mysql须要创立二个一时表来存款和储蓄结果,那日常产生在对不一致的列集举办order by上,实际不是group by上

index: 那么些再三再四类型对眼下的表中的每三个记录联合进行完全扫描(比all越来越好,因为索引日常小于表数据)

system 表独有一行:system表。那是const连接类型的独特意况

  explain来得了mysql如何使用索引来管理select语句以致连接表。能够扶助慎选更加好的目录写出更优化的询问语句

/*
 Navicat MySQL Data Transfer

 Source Server         : localhost-newpassword
 Source Server Version : 50550
 Source Host           : localhost
 Source Database       : testExplain

 Target Server Version : 50550
 File Encoding         : utf-8

 Date: 08/05/2016 18:06:12 PM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(30) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` tinyint(4) NOT NULL,
  `isDeleted` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_unidx` (`id`) USING BTREE,
  UNIQUE KEY `name_unidx` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `user`
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES ('1', 'wwwwe', '11', '1', '0'), ('2', '222', '22', '1', '0'), ('3', '2222', '10', '0', '0');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

distinct:一旦mysql找到了与行相联合相配的行,就不再找出了

eq_ref:在连接中,mysql在查询时,在此之前边的表中,对每四个记录的一块都从表中读取二个笔录,它在查询利用了目录为主键或惟一键的满贯时使用


all:这几个接二连三类型对于近年来的每贰个笔录联合开展完全扫描,那日常相比不好,应该尽量防止

 

using index: 列数据是从仅仅使用了目录中的新闻而从不读取实际的步履的表重回的,那发生在对表的整套的呼吁列都以同三个目录的片段的时候

选择办法:在select语句前加上explain 就可以了,如:

range:这么些延续类型应用索引再次回到三个范围中的行,例如利用>或<查找东西时产生的状态

2、explain使用方法

key: 实际运用的目录。要是为null,则从未行使索引。少之甚少的意况下,mysql会挑选优化不足的目录。这种景色下,可以在select语句中选择use index(indexname)来强制行使二个目录或然用ignore index(indexname)来强制mysql忽视索引

rows:mysql以为必得检查的用来回到必要数据的行数,数值越大越不佳,表达未有用好索引

3、explain种种参数解释

ref:这几个接二连三类型独有在查询利用了不是惟一或主键的键也许是那些项指标有的(举例,利用最左侧前缀)时发生。对于从前的表的每三个行联合,全体笔录都将从表中读出。这一个类型严重信任于依靠目录匹配的笔录多少—越少越好

  致谢:谢谢您的读书! 

结果:

id:select识别符。那一个是select查询体系号。这一个不主要,查询序号即为sql语句实践的一一。

select_type重大有上边多少个值:

using filesort: 看见这个的时候,查询就需求优化了。mysql需求开展额外的步子来发掘什么样对回到的行排序。它根据延续类型以致存储排序键值和合营原则的百分百行的行指针来排序全体行

type:呈现一而再使用了何种类型。从最棒到最差的连接类型为const、eq_reg、ref、range、indexhe和all

possible_keys:展现大概应用在此张表中的目录。即使为空,没有也许的目录。可以为有关的域从where语句中选用二个安妥的说话

key_len:使用的目录的长短。在不损失正确性的状态下,长度越短越好

 extra列重回的陈诉的意义

ref:展现索引的哪一列被选拔了,若是或者的话,是三个常数

range checked for each record(index map:#):未有找到优秀的目录,由此对此从前边表中来的每贰个行组合,mysql检查选拔哪个索引,并用它来从表中重回行。那是使用索引的最慢的连接之一

table:输出的行所用的表

where used 使用了where从句来界定哪些行将与下一张表相称只怕是重临给客户。要是不想回来表中的万事行,并且连接类型all或index,那就能够时有产生,也许是查询有难点不等连接类型的解释(依据成效高低的依次排序)

  创建的sql语句如下:

本文由上海时时乐走势图发布于上海时时乐走势图官网,转载请注明出处:mysql explain的利用(优化查询)上海时时乐走势图

您可能还会对下面的文章感兴趣: