mysql解释摘要

解释主要用于SQL语句中的SELECT查询。它能显示SQL语句索引的命中情况,从而更好地利用索引,优化查询效率。

解释语法如下:解释{扩展}选择…

其中,扩展被选中。如果使用扩展,那么解释可以使用显示警告来查看相应的优化信息,也就是说,查询实际上是在MySQL内部执行的。




列名称

描述

解释

相关链接



身份证件


没有子查询和连接查询,编号是1。


MySQL按ID从大到小执行查询,id相同时从上到下执行。




select_type


选择类型。



常见的类型






由输出行引用的表。


有时看到的是,n对应id列的值。







MySQL访问方法,连接访问类型。



常见的类型



possible_keys


可以在查询期间使用的索引。


本栏目在优化开始创建,但它将根据在以后的优化过程的实际情况选择,因此指数在这一栏不得用于后续的过程。这一栏是空的,这意味着没有相关的指标,可以用来确定是否需要根据实际情况建立索引。




关键


在访问过程中实际使用的索引。


它可能不会出现在possible_keys(可用于覆盖指数,即使没有在查询)。possible_keys揭示哪些指标更有效。关键是优化器决定哪些指标可以减少查询成本、查询成本是基于系统的总成本。如果是MySQL的使用或忽略possible_keys指标是强制性的,你需要使用力量指数,利用指数,或忽略索引查询。




key_len


使用索引显示字节数。


从表结构,而不是实际的数据计算字节数。例如,ColumnA(char(3))columnb(int(11)),集UTF-8字符,key_len = 3 * 3 + 4 = 13.it需要考虑字符集对应的字符列,和不同的字符集对应的字节数不同。


的latin1,UTF8,对应GBK字符,字节,在mysql5.1.5汉字



裁判


显示哪些字段或常量与从表中记录的键一起使用,显示在索引查询中用作值的其他表单中的字段或常量。








期望对结果集返回的行进行扫描。


不是最终结果集的函数,乘以所有行可以估计整个查询需要检查的行数。当您有限制时,这是不准确的。(对于毛)




额外的


MySQL查询的附加信息。



常见的信息

选择类型:

没有子查询或联合查询都包含在简单的查询。

原发性:最外层包含子查询选择查询或联合查询的查询。

子查询:查询中的选择目标,不从,第一选择的子查询。

例如:解释选择(选择actor_id从演员)从film_actor



相关子查询:先选择一个查询的内层,取决于外部查询的结果集。

例如:解释选择*从演员那里actor_id在(选择actor_id从film_actor)



解释选择*从演员那里actor_id在(选择actor_id从film_actor哪里)



解释选择*从演员那里actor_id(选择= actor_id从film_actor哪里actor_id = 1)



可缓存的查询:代表子查询返回的结果,但不可缓存,它必须重新计算在外查询的基础。(在什么情况下会发生这种事)

来源:FROM子句中的子查询,查询的执行时间将手柄设置成一个临时表的查询结果(派生表)。

例如,从*(从角色中选择*)解释select *。在这一点上,表列将显示n对应id列的值。



联合:联合查询中的第二种类型及其后续选择。

例如:解释选择*从film_actor联盟所有SELECT * FROM演员



如果联盟中包括从查询,第一选择标签的子查询导出。

例如:解释select * from(select * from film_actor联盟所有SELECT * FROM演员)一



联合结果:从联合临时表获取结果集。例如,上述两个查询结果的最后一行集中。1,2,其中ID列表标识为id列,当id列表的长度大于20时,后者将被省略。

相关子查询:在工会联盟和所有选择背后的第二选择的联盟,这也取决于外部查询的结果集。

例如:解释选择*从演员那里actor_id在(选择actor_id从film_actor联盟)



可缓存的联盟:联盟第二或以后的选择,但结果不可缓存,必须重新计算根据外部查询(在什么情况下)。

从效率的高到低给出了几种常见的类型类型:

空:MySQL在优化过程中分解查询,在执行时甚至不重新访问表数据或索引,如id = 1。

例如,解释选择*从演员那里actor_id = - 1



Const:最多会有一个记录匹配,因为只有一行,这个行中的列值可以由优化器的其余部分视为常量。const表很快,因为它们只读一次。当有一个唯一的主键或主键时,它就发生了,WHERE子句为它设置了一个比较值。

例如:解释选择*从演员那里actor_id = 1(其中actor_id是主键)



eq_ref:使用此索引查找,并返回一个符合最高纪录。当你访问数据使用主键或唯一索引,你可以看到,这可能是最好的类型的连接除了const类型。

例如,解释选择*从演员,actorsex哪里actor.actor_id = actorsex.actor_id(actor_id是演员和actorsex,主键,如果多个记录是不存在的actor_id)中,只有一个记录。



参考:这是一个索引访问。只有当使用非唯一索引或唯一索引的前缀的非唯一性(换句话说,不是根据记录中的值)时,该指数和一个值,这个值可能是一个常数,它可从多个表值列表查询结果。如果键仅用于匹配一个小的行数,连接类型是好的。

例如,解释选择*从film_actor,演员在film_actor。actor_id = actor.actor_id和film_actor actor_id = 1。



ref_or_null:类似参考不同的是,MySQL检索时,额外的搜索包含空值的记录。这意味着MySQL必须搜索两次,并在初始搜索结果中找到空条目。

index_merge:在查询中使用两个或两个以上的指标,然后合并索引的结果。在这种情况下,键列包含的所有指标,并key_len包含这些指标的最关键要素。

SELECT * FROM测试在column1 = 1 = 2(没有尝试的方法!555555)

unique_subquery:它是用来优化与子查询和子查询,是通过一个独特的关键选择。字段的组合查询返回的是主键或唯一索引。

例如:解释选择*从演员那里actor_id在(选择actor_id从演员)



index_subquery:此连接类型是相似的unique_subquery。子查询中返回的结果字段组合是索引或索引组合,但它不是主键或唯一索引。

例如:解释选择*从film_actor film_id在哪里(选择film_id从film_actor)



指数:数据在索引的顺序扫描,因为索引扫描,排序将被避免,但整个表的数据将被扫描,并随机读的开销会更大。如果使用索引显示额外的列,它是用来覆盖指数(覆盖指标:该指数包含所有数据列满足查询要求),InnoDB表是特别有用的。此时,只能访问索引数据。不需要基于主键信息获取原始数据,从而避免了两个查询,而与InnoDB的MyISAM表的优化效果不太明显。

所有的扫描全表数据线除非使用不同的或notexists限定查询有限制或额外的列。

额外的信息:

区别:当MySQL找到第一个匹配的结果值时,它停止对值的查询,然后继续对列的其他值的查询。

不存在:在左连接,优化器可以通过改变原来的查询优化方法结合使用。数据访问的数量可以减少一部分当一个匹配行找到并不再继续检索一行。例如,表T1和T2,在t2.id是无效的,因为SELECT * FROM T1 T2和左左连接,不是空的,所以它只能在中间而不是在中间,所以结果等于差异。左连接最初加入的两侧,现在MySQL优化只需要跳出根据t1.id T2找到一个t2.id。

未找到const行:所涉及的表是空表,其中没有数据。

对空键全扫描:优化器是查询优化器,这优化时无法做到零价值不是通过索引访问。

不可能有:子句总是错误的,不能选择任何列。例如,有1=0

不可能的地方:WHERE子句总是错误的,不能选择任何列。例如,1=0

不可能,注意在阅读常量表:MySQL读取const /系统表发现WHERE子句是错误的。也就是说,表中对应的错误条件的WHERE子句中应建立/系统表。这不是什么MySQL通过统计信息,但结论为实际的数据访问,真的来了。当指定表或非空的唯一主键索引的等价条件,最多可以打一个查询结果,MySQL在解释将优先根据条件找到相应的记录,记录所有的用来代替从表属性的地方查询的实际价值。

例如,SELECT * FROM A,B = 1张b.name = a.name

实现过程如下:首先,找到一个记录(1,'name1)根据张= 1,然后改变b.name to'name1 ',然后找到通过a.name = 'name1 ',没有创纪录,最后回到地方后不注意阅读后。

没有匹配的最小行/最大行:没有行满足以下查询条件。

例如:解释选择min(actor_id)从演员那里actor_id > 3(只有两个记录)

当actor_id是一个独特的指标,没有匹配的最小/最大的行显示出来,否则,将显示使用。

const表中没有匹配的行:带有连接的查询,包含空表或没有满足唯一索引条件的数据。

没有使用表:查询没有一个from子句,或者有一个从双(双:一个虚拟表,以满足选择)…从…习惯)从句。

例如:解释选择版本()

范围检查每个记录(指数图:N):MySQL没有找到很好的指标,但它是发现,如果我们得到的联接表下表的价值,有些是可以通过等待使用。MySQL没有找到合适的可替代的方法是指数。对上表的每一行的连接,如果做一个测试来决定使用哪个索引,并使用该指标,从表中获取记录。这个过程不会很快,但它总是比一个表连接的时候没有指数。

选择表优化:当我们使用聚合函数和索引访问字段,优化器将定位所需的数据行直接通过索引来完成整个查询。使用聚合函数如民和马克斯的查询,我们可以直接访问左边的叶节点或存储结构最合适的叶节点(B树和B+树),这是可以解决的指标。select count(*)从表(不包括在同等条款),MyISAM节省的总记录数,可以直接返回结果,而InnoDB需要全表扫描。没有GROUP BY操作查询。

独特的未找到行:选择…从tbl_name,没有行满足独特的索引或主键查询的值不在表中存在的表显示不可能,注意在阅读常量表。

使用filesort:这意味着MySQL将安排外部而不是在索引顺序排序的结果。这种时候从内存中数据较少,或者从磁盘。解释不出什么来告诉客户端。

使用索引:表示MySQL使用覆盖索引避免完整的表扫描,并且不需要再次在表中查找数据,请注意不要混淆类型中的索引类型。

使用组索引:与使用索引类似,所需的数据只需要读取索引。当组在查询中有或有不同子句时,如果分组字段也在索引中,则额外将显示此值。

使用临时:MySQL会创建一个临时表来保存中间结果。如果必要时组和秩序是必要的,例如组由非键列,优化器将创建一个临时表,有一组按照独特的关键施工条件,然后为每个查询结果(集团,将试图忽略)到临时表中,独特的关键,如果插入失败,那么相应的更新记录。例如,有名字,没有索引选择名称,数量(*)从产品组的名字,为了排序,MySQL需要创建一个临时表。使用filesort也通常在这个时候显示。

使用地点:表明,MySQL将过滤器从存储引擎中提取的结果。例如,没有价格指数,选择*从产品价格= 1300.00.there许多条件,包括滤波器的指标,它可以过滤搜索时,所以不是所有查询的WHERE子句将显示使用的地方。

采用加入缓冲区的值:5.1.18版本,加入返回列可以从缓冲区中获得的,与电流表连接。

例如,解释选择*从T1,T2,t1.col<10和t2.col<10

扫描模式:需要扫描的处理information_schema查询目录的数量。

例如,解释选择table_name,row_format从information_schema.tables

在Internet上,查询将显示扫描所有数据库,并尝试将额外的列为空。

skip_open_table,open_frm_only,open_trigger_only,open_full_table:表示文件打开时,查询信息information_schema.skip_open_table优化:表信息了,它不需要opened.open_frm_only:只有打开。FRM file.open_trigger_only:只有打开。教研组file.open_full_table:没有优化。FRM,Myd,和我的文件都是。打开。

使用sort_union(…),使用联盟(…),使用交叉(…):所有出现在index_merge读式。用sort_union:提取数据与两个或两个以上的关键,但优化器不能保证每个密钥将提取的自然秩序,所以为了排除冗余的数据,额外的处理是需要的。例如,客户状态,(模型、名)是关键,而不是模型的关键,select count(*)从顾客那里(lname =jones'or(州)=UT),因为上面没有钥匙的模型,所以使用(lname、名),结果可以不按照顺序,它需要一些额外的工作。通过联盟:数据提取与两个或两个以上的关键,并对结果进行排序,并正确的结果可以通过体静。例如,国家和(lname、名)客户是关键,选择计数(州)从顾客那里(或= =)。使用相交:数据提取与两个或两个以上的关键,并对结果进行排序,并正确的结果可以通过交叉的。例如,国家和(lname、名)客户是关键,选择计数(州)从顾客那里(或= =)。

用在推条件:仅用于NDB。MySQL集群优化非索引字段和常数条件下推优化之间的直接比较。条件是一个数据节点从下推到集群,预计在同一时间,在所有的数据节点,从网络传输消除不兼容列。

之间的对应关系latin1,UTF8,GBK字符,字节,在mysql5.1.5汉字:

latin1:

1character = 1byte,1汉字= 2character字段定义为varchar(200),它可以存储100个中文或200个字符占用200个字节。特别是,当该字段的内容是由字母和汉字,假定字段的内容都是由中国人物,和长度的字段设置相应的。

UTF8:

1character = 3bytes,1汉字= 1character字段定义为varchar(200),它可以存储200或200个字母,占用600个字节。

Gbk:

1character = 2bytes,1汉字= 1character字段定义为varchar(200),它可以存储200或200个字母,占用400个字节。

word版本包下载