最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
加速MySQL SQL语句优化的一些命令方法
时间:2016-09-26 编辑:简简单单 来源:一聚教程网
引言
-
EXPLAIN QUERY
-
EXPLAIN EXTENDED QUERY
-
EXPLAIN PARTITIONS QUERY
-
EXPLAIN FORMAT=JSON (5.6新特性)
-
id
-
select_type
-
DEPENDENT SUBQUERY子查询内层的第一个SELECT,依赖于外部查询的结果集。
-
DEPENDENT UNION子查询中的UNION,且为UNION中从第二个SELECT开始的后面所有SELECT,同样依赖于外部查询的结果集。
-
PRIMARY子查询中的最外层查询,注意并不是主键查询。
-
SIMPLE除子查询或UNION之外的其他查询。
-
SUBQUERY子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集。
-
UNCACHEABLE SUBQUERY结果集无法缓存的子查询。
-
UNIONUNION语句中的第二个SELECT开始后面的所有SELECT,第一个SELECT为PRIMARY。
-
UNION RESULTUNION中的合并结果。从UNION临时表获取结果的SELECT。
-
DERIVED衍生表查询(FROM子句中的子查询)。MySQL会递归执行这些子查询,把结果放在临时表里。在内部,服务器就把当做一个”衍生表”那样来引用,因为临时表就是源自子查询。
-
table
-
type
-
system系统表,表只有一行记录。这是const表连接类型的一个特例。
-
const读常量,最多只有一行匹配的记录。由于只有一行记录,优化程序里该行记录的字段值可以被当作是一个恒定值。const用于在和PRIMARY KEY或UNIQUE索引中有固定值比较的情形。
-
eq_ref最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问。从该表中会有一行记录被读取出来以和从前一个表中读取出来的记录做联合。与const类型不同的是,这是最好的连接类型。它用在索引所有部分都用于做连接并且这个索引是一个PRIMARY KEY或UNIQUE类型。eq_ref可以用于在进行”=”做比较时检索字段。比较的值可以是固定值或者是表达式,表达示中可以使用表里的字段,它们在读表之前已经准备好了。
-
refJOIN语句中驱动表索引引用的查询。该表中所有符合检索值的记录都会被取出来和从上一个表中取出来的记录作联合。ref用于连接程序使用键的最左前缀或者是该键不是PRIMARY KEY或UNIQUE索引(换句话说,就是连接程序无法根据键值只取得一条记录)的情况。当根据键值只查询到少数几条匹配的记录时,这就是一个不错的连接类型。ref还可以用于检索字段使用”=”操作符来比较的时候。
-
ref_or_null与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。这种连接类型类似ref,不同的是MySQL会在检索的时候额外的搜索包含NULL值的记录。这种连接类型的优化是从MySQL 4.1.1开始的,它经常用于子查询。
-
index_merge查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。这种连接类型意味着使用了Index Merge优化方法。
-
unique_subquery子查询中的返回结果字段组合是主键或唯一约束。
-
index_subquery子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引。这种连接类型类似unique_subquery。它用子查询来代替IN,不过它用于在子查询中没有唯一索引的情况下。
-
range索引范围扫描。只有在给定范围的记录才会被取出来,利用索引来取得一条记录。
-
index全索引扫描。连接类型跟ALL一样,不同的是它只扫描索引树。它通常会比ALL快点,因为索引文件通常比数据文件小。MySQL在查询的字段知识单独的索引的一部分的情况下使用这种连接类型。
-
fulltext全文索引扫描。
-
all全表扫描。
-
possible_keys
-
key
-
key_len
-
ref
-
rows
-
Extra
-
filtered
-
Name: 表名
-
Engine: 表的存储引擎类型(ISAM、MyISAM或InnoDB)
-
Row_format: 行存储格式(Fixed-固定的、Dynamic-动态的或Compressed-压缩的)
-
Rows: 行数量。在某些存储引擎中,例如MyISAM和ISAM他们存储了精确的记录数。不过其他存储引擎中,它可能只是近似值。
-
Avg_row_length: 平均行长度。
-
Data_length: 数据文件的长度。
-
Max_data_length: 数据文件的最大长度。
-
Index_length: 索引文件的长度。
-
Data_free: 已分配但未使用了字节数。
-
Auto_increment: 下一个autoincrement(自动加1)值。
-
Create_time: 表被创造的时间。
-
Update_time: 数据文件最后更新的时间。
-
Check_time: 最后对表运行一个检查的时间。执行mysqlcheck命令后更新,仅对MyISAM有效。
-
Create_options: 额外留给CREATE TABLE的选项。
-
Comment: 当创造表时,使用的注释(或为什么MySQL不能存取表信息的一些信息)。
-
Version: 数据表的’.frm’文件版本号。
-
Collation: 表的字符集和校正字符集。
-
Checksum: 实时的校验和值(如果有的话)。
-
Table: 表名。
-
Non_unique: 0,如果索引不能包含重复。
-
Key_name: 索引名
-
Seq_in_index: 索引中的列顺序号,从1开始。
-
Column_name: 列名。
-
Collation: 列怎样在索引中被排序。在MySQL中,这可以有值A(升序)或NULL(不排序)。
-
Cardinality: 索引中唯一值的数量。
-
Sub_part: 如果列只是部分被索引,索引字符的数量。当整个字段都做索引了,那么它的值是NULL。
-
Packed: 表示键值是如何压缩的,NULL表示没有压缩。
-
Null: 当字段包括NULL的记录是YES,它的值为,反之则是”。
-
Index_type: 使用了哪种索引算法(有BTREE、FULLTEXT、HASH、RTREE)。
-
Comment: 备注。
-
系统参数: 系统参数也会影响语句的执行效率。查看系统参数,可使用SHOW VARIABLES命令。
-
sort_buffer_size
-
join_buffer_size
-
tmp_table_size
-
read_buffer_size
-
optimizer_search_depth
-
optimizer_prune_level
-
optimizer_switch
-
Sort_merge_passes
-
Sort_range
-
Sort_rows
-
Sort_scan
-
Handler_read_first
-
Handler_read_key
-
Handler_read_next
-
Handler_read_prev
-
Handler_read_rnd
-
Handler_read_rnd_next
-
开启
-
执行SQL语句
-
获取概要信息
-
针对单个Query获取详细的profile信息
-
模块 – MySQLDB
-
模块 – sqlparse
-
Python版本 = 2.7.3 (2.6.x版本应该也没问题,3.x版本没测试)
-
上一个: MySQL innodb引擎详解
相关文章
- Mysql占用过高CPU时的优化手段(必看) 07-17
- MySQL优化之COUNT(*)效率分析 11-02
- Mysql中order by语句的优化详解 07-29
- Mysql insert语句的优化总结 07-29
- Mysql group by语句的优化分析 07-29
- 借助 MySQLTuner 优化 MySQL 性能 07-08