mysql优化--explain

explain:定位执行效率低的语句。


mysql>explain select count(*) from stu where name like"a%"\G
*************************** 1. row ***************************
                    id: 1
           select_type:SIMPLE
                   table: stu
                    type: range
           possible_keys: name,ind_stu_name
                     key: name
                 key_len:50
                     ref: NULL
                    rows: 8
                   Extra: Using where; Usingindex
                   1 row in set (0.00 sec)


简单解释:

id: 1

select_type:SIMPLE 表示select的类型,常见的取值有SIMPLE()简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(子查询中的第一个SESECT)等

table:stu输出结果集的表

type: range  表示表的连接类型,性能有好到差:system(表仅一行)、const(只一行匹配)、eq_ref(对于前面的每一行使用主键和唯一)、ref(同eq_ref,但没有使用主键和唯一)、ref_or_null(同前面对null查询)、index_merge(索引合并优化)、unique_subquery(主键子查询)、index_subquery(非主键子查询)、range(表单中的范围查询)、index(都通过查询索引来得到数据)、all(通过全表扫描得到的数据)

possible_keys:name,ind_stu_name表查询时可能使用的索引。

key: name   表示实际使用的索引。

key_len: 50  索引字段的长度

ref: NULL  

rows: 8   扫描行的数量

Extra: Using where; Using index 执行情况的说明和描述


explain优化语句:

1.优化索引:

   使用like查询,%在第一位使用不到索引。

       >explain select * from company2 where name like "%3"\G

               possible_keys:NULL
                         key: NULL    

       >explain select * from company2 where name like "3%"\G

               possible_keys:ind_company2_name                          

                         key:ind_company2_name  

   如果列名是索引,使用column_nameis null将使用索引.

       explainselect * from company2 where name is null\G  

               possible_keys:ind_company2_name                          

                         key:ind_company2_name

   如果不是索引列的第一部分,虽然在money上面建有复合索引,但是由于money不是索引的第一列,那么在查询中这个索引也不会被MySQL采用。

       explainselect * from sales2 where moneys=1 \G

               possible_keys:NULL
                        key: NULL


                     


你可能感兴趣的:(mysql,where,count)