ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行。 6 possible_keys 表示查询时,可能使用的索引。...key_len显示的值为索引字段的最大可能长度, 并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。 9 ref 使用哪个列或常数,与索引一起被用于从表中查找索引列上的值。...Using index:只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...查询的所有列,而不要额外搜索硬盘访问实际的表。...Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...) 不损失精确性的情况下,长度越短越好 八、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数...“文件排序” Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 Impossible where:这个值强调了where语句会导致没有符合条件的行。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
(1)如果查询使用了别名,那么这里显示的是别名; (2)如果不涉及对数据表的操作,那么这显示为null; (3)如果显示为尖括号括起来的 就表示这个是临时表,后边的N就是执行计划中的...(10)index:索引全表扫描,把索引树从头到尾扫描一遍; (11)all:遍历全表以找到匹配的行(Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取) (12)NULL...(3)key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。...(1)如果是使用的常量等值查询,这里会显示const。 (2)如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段。...(3)如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func。 9、rows: 表示MySQL根据表统计信息及索引选用情况,大致估算此处查询需要读取的行数,不是精确值。
七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...) 不损失精确性的情况下,长度越短越好 八、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数...十、Extra 该列包含MySQL解决查询的详细信息,有以下几种情况: Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候...“文件排序” Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 Impossible where:这个值强调了where语句会导致没有符合条件的行。
七、key_len *表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...)* 不损失精确性的情况下,长度越短越好 八、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数...十、Extra 该列包含MySQL解决查询的详细信息,有以下几种情况: Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候...“文件排序” Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 Impossible where:这个值强调了where语句会导致没有符合条件的行。
table 输出结果集的表 partitions 匹配的分区 :------------ :------------ type 表示表的连接类型 possible_keys 表示查询时,可能使用的索引...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...) 不损失精确性的情况下,长度越短越好 八、ref 列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 估算出结果集行数,表示MySQL根据表统计信息及索引选用情况...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 Impossible where:这个值强调了where语句会导致没有符合条件的行(通过收集统计信息不可能存在结果)。...EXPLAIN不能显示MySQL在执行查询时所作的优化工作 部分统计信息是估算的,并非精确值 EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。
id列: 表示执行顺序,值越大则优先级越高;值相同则从上而下执行 select_type列常见的有: simple:表示不需要union操作或者不包含子查询的简单select查询。...且只有一个 union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表 select_type都是union dependent union:与union...subquery的查询要受到外部表查询的影响 derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌select table列 显示的查询表名,如果查询使用了别名,...Ref列: 如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为...func Rows列: 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,值越大性能越差 Extra列: 包含不适合在其他列中显示但十分重要的额外信息 Using index
8.小表不应建立索引; 包含大量的列并且不需要搜索非空值的时候可以考虑不建索引 索引的分类 主键索引 主键索引:只能有一个主键。...d. ref:使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行 e. eq_ref:类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用...,显示为NULL 7、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得...,不是通过表内检索出的) 8、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 9、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数 10...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 f. Impossible where 这个值强调了where语句会导致没有符合条件的行。 I.
key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...该值可能为NULL,如果这一行用来说明的是其他行的联合结果。...select_type 表示查询的类型 类型 说明 simple 简单子查询,不包含子查询和union primary 包含union或者子查询,最外层的部分标记为primary subquery 一般子查询中的子查询被标记为...使用explain,可以分析出需要在哪里加上索引,以及调整表的连接,以达到优化查询的目的;explain命令之后不仅可以跟select语句,也可以跟delete,insert,update,replace...Using join buffer:该值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
select_type列常见的有: A:simple:表示不需要union操作或者不包含子查询的简单select查询。...且只有一个 C:union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union D:dependent union...显示的查询表名,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的就表示这个是临时表,后边的N就是执行计划中的id,...其他数据库也叫做唯一索引扫描 C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现...即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。 D:using filesort:排序时无法使用到索引时,就会出现这个。
SIMPLE:查询中不包含子查询或者UNION PRIMARY: 查询中若包含任何复杂的子部分,最外层查询被标记为PRIMARY SUBQUERY: 在SELECT或WHERE列表中包含了子查询 DERIVED...ALL: 扫描全表 index: 只遍历索引树,直接从索引中就可以获取数据满足查询, 而不需要再去查询数据表中的数据....注:key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。 八、ref:显示哪个字段或常数与key一起被使用。...九、rows: 显示此查询一共扫描了多少行才能找到. 这个是一个估计值. 十、Extra: 包含不适合在其他列中显示但十分重要的额外信息。...Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
1.SIMPLE:查询中不包含子查询或者UNION 2.PRIMARY: 查询中若包含任何复杂的子部分,最外层查询被标记为PRIMARY 3.SUBQUERY: 在SELECT或WHERE列表中包含了子查询...ALL: 扫描全表 index: 只遍历索引树,直接从索引中就可以获取数据满足查询, 而不需要再去查询数据表中的数据....注:key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。 八、ref:显示哪个字段或常数与key一起被使用。...九、rows: 显示此查询一共扫描了多少行才能找到. 这个是一个估计值. 十、Extra: 包含不适合在其他列中显示但十分重要的额外信息。...Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联 6) 避免使用临时表 (1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替...可以使用联合(UNION)来代替手动创建的临时表 MySQL从4.0的版本开始支持UNION查询,它可以把需要使用临时表的两条或更多的SELECT查询合并的一个查询中。...使用UNION来创建查询的时候,我们只需要用UNION作为关键字把多个SELECT语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同。...C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。 ...索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可 5) 在索引字段上使用not,,!
DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序 2) 如果无需排除重复值或是操作集无重复则用UNION ALL, UNION更费事(因为要比较) UNION因为会将各查询子集的记录做比较...b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联 6) 避免使用临时表 (1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替...可以使用联合(UNION)来代替手动创建的临时表 MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。...C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。...索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可 5) 在索引字段上使用not,,!
第二、 两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。...第三、 多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录...DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序。 10.临时表 慎重使用临时表可以极大的提高系统性能。...12.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如:select id from t where num is null 可以在num上设置默认值...而另一种方式是去掉查询第二层的WHERE ROWNUM 查询的最外层控制分页的最小值和最大值。 2.
解决办法: 其实只需要对该脚本略做改进,查询速度便会提高近百倍。...DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序。 10.临时表 慎重使用临时表可以极大的提高系统性能。...上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 13.应尽量避免在 where 子句中使用!...14.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询...,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引, 如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用
此访问方法仅合并来自单个表的索引扫描,而不扫描多个表。...仅索引扫描通常比ALL索引的大小通常小于表数据更快 。 使用索引中的读取执行全表扫描,以按索引顺序查找数据行。 Uses index没有出现在 Extra列中。...当查询仅使用属于单个索引的列时,MySQL可以使用此连接类型。 ALL 对前面表格中的每个行组合进行全表扫描。如果表是第一个未标记的表 const,通常不好,并且在所有其他情况下通常 非常糟糕。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...) 不损失精确性的情况下,长度越短越好 八、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。...七、key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的...) 不损失精确性的情况下,长度越短越好 八、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 九、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数...“文件排序” Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。...如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。 Impossible where:这个值强调了where语句会导致没有符合条件的行。
MySQL参数设置 通用配置 max_connections : MySQL能创建的最大连接数,如果数据库的并发量比较大,建议调高此值,以增加并行连接数量,当然连接数越多,由于MySQL会为每个连接创建连接缓冲区...,所以在连接查询的执行计划中,每个表都会对应一条记录,但是这些记录的id值都是相同的....select_type的属性,代表着这个小查询在整个大查询中的查询类型,select_type的取值为: 名称 描述 SIMPLE 查询语句中不包含UNION或者子查询 PRIMARY 对于包含UNION...的大查询来说,它是由几个小查询组成的,其中除了最左边的那个小查询以外,其余的小查询的select_type值就是UNION UNION RESULT MySQL选择使用临时表来完成UNION查询的去重工作...如果使用的是索引执行的单表扫描,那么计算驱动表扇出的时候需要估计出满足除使用到对应索引的搜索条件外的其他搜索条件的记录有多少条。
,尽量少用or or两边的字段中,如果有一个不是索引字段,而其他条件也不是索引字段,会造成该查询不走索引的情况。...---- 十二、避免在 where 子句中对字段进行 null 值判断 对于null的判断会导致引擎放弃使用索引而进行全表扫描。...---- 十三、不建议使用%前缀模糊查询 例如LIKE “%name”或者LIKE “%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。...STRAIGHT_JOIN来强制连接顺序,在STRAIGHT_JOIN左边的表名就是驱动表,右边则是被驱动表。在使用STRAIGHT_JOIN有个前提条件是该查询是内连接,也就是inner join。...其他链接不推荐使用STRAIGHT_JOIN,否则可能造成查询结果不准确。 ? 这个方式有时可能减少3倍的时间。 这里只列举了上述优化方案,当然还有其他的优化方式,大家可以去摸索尝试,感谢关注。
领取专属 10元无门槛券
手把手带您无忧上云