explain select * from table; 这样可以查看到一个语句的执行计划。
mysql> explain select Orgid,Stkcd,Secnme from CO_CRLSEC
where Stkcd in (
select Seccd from IDX_SmpChg
where Indextype=1
and Indexcd=000300
and Enddt is null
);
+----+--------------------+------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+------------+------+---------------+------+---------+------+--------+-------------+
| 1 | PRIMARY | CO_CRLSEC | ALL | NULL | NULL | NULL | NULL | 3029 | Using where |
| 2 | DEPENDENT SUBQUERY | IDX_SmpChg | ALL | NULL | NULL | NULL | NULL | 129083 | Using where |
+----+--------------------+------------+------+---------------+------+---------+------+--------+-------------+
2 rows in set
解释:
1. select_type: 表示SELECT 的类型,常见的取值有simple(简单表,即不使用表连接或者子查询),primary(主查询,即外层的查询),union(union中的第二个或者后面的查询语句),subquery(子查询中的第一个SELECT 语句)等。
2.table: 输出结果集的表。
3.type: 表示表的连接类型,性能由好到差的连接类型为: system(表中公有一行,即常量表),const(单表中最多有一个匹配行,例如primary key 或者unique index),eq_ref(对于前面的每一行,在此表中只查询一条记录,简单的来说,就是多表连接中使用PRIMARY KEY 或者UNIQUE INDEX),ref(与eq_ref类似,区别在于不是使用primary key 或者unique index,而是使用普通的索引),ref_or_null(与ref类似,区别在于条件中包含对NULL的查询),index_merge(索引合并优化), unique_subquery(in的后面是一个查询主键字段的子查询), index_subquery(对于前面的每一行,都通过查询索引来得到数据), all(对于前面的每一行,都通过全表扫描来得到数据)。
4.possible_keys: 表示查询时,可能使用的索引。
5.key: 表示实际使用的索引。
6.key_len:索引字段的长度。
7.rows: 扫描行的数量。
8.extra:执行情况的说明和描述。