MySQL调优-索引

Posted 天枰喜爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL调优-索引相关的知识,希望对你有一定的参考价值。

Mysql索引分析优化

Explan + SQL(操作)

+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | SIMPLE | tb_mail_server | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |+----+-------------+----------------+------------+------+---------------+------+---------+------+------+----------+-------+

作用:

1、表的读取顺序

2、数据读取操作的操作类型

3、哪些索引可以使用

4、哪些索引被实际使用

5、表之间的引用

6、每张表有多少行被优化查询

id

select查询的序列号,表示查询中执行select子句或操作表的顺序

三种情况:

id相同,执行顺序由上至下
id不同,如果是子查询,id会递增,值越大越优先级越高,就越先执行
id相同不同时 先执行值大的,后顺序执行id相同的

type 

ALL、index、range、ref、eq_ref、const,system、NULL、

显示查询使用了何种类型,

从最好到最差依次是:system > const > eq_ref > ref > range > index > ALL

keys

rows

Extra

Using filesort  文件内排序

Using temporary 使用临时表

mysql> explain select * from tab_employ group by id%10 order by name;+----+-------------+------------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+------------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+| 1 | SIMPLE | tab_employ | NULL | ALL | PRIMARY | NULL | NULL | NULL | 467750 | 100.00 | Using temporary; Using filesort |+----+-------------+------------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+1 row in set, 1 warning (0.01 sec)

索引优化 

1、单表

若创建的索引字段,存在在查找有范围的情况,则所建索引将失效

EXPLAIN 查看执行计划, 存在Using filesort

2、两表

连接方式:左连建右,右连建左,索引建在相反的表上

3、三表

索引建在常被使用的字段上


索引失效情况:

查看表索引情况

show index from 表名称;

1、索引顺序不能变、不能断(第一个索引必须要被使用)

2、索引列不计算,手动或自动类型转换

3、范围之后都失效,>、<、!=、<>、is null、is not null、or 

4、like 查询%放右边(Tping%)

①若不得以使用(%Tping%)情况,使用覆盖索引(select 索引列 from)

5、字符串要加引号


优化口诀:

全值匹配我最爱,最左前缀要遵守

带头大哥不能死,中间兄弟不能断

索引列上少计算,范围之后全失效

LIKE百分写最右,覆盖索引不写星

不等空值还有OR,索引失效要少用


查询优化

永远小表驱动大表
Order By 关键字优化(遵循最左前缀)
Mysql两种排序方式:
文件排序、扫描索引排序
Mysql能为排序与查询使用相同索引


Group By关键字优化
是先排序后进行分组,遵照索引建的最佳左前缀
当无法索引索引列 ,增大max_length_for_sort_data、sort_buffer_size参数设置
where高于having,能写在where限制的条件就不要去having限定了

以上是关于MySQL调优-索引的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 索引机制以及调优

MySQL 索引机制以及调优

Mysql索引性能调优

MySQL调优4---索引

MySQL调优索引优化

MySQL 性能调优