mysql优化查询之索引

explain sql内容 生成执行计划

重点关注的结果列

select_type = all,代表全表扫描,后面的内容不用看。

key = null,代表没有使用索引

rows显示扫描行数,数值越大,扫描行数越多,耗时越长。(行数值并不完全精确)

extra列 出现 Using filesort / Using temporary ,都是很影响数据库性能的。

优化思路

1.表的数据类型设计是否合理,遵循数据类型选取越简单越小原则

2.整理表的碎片

3.explain查询执行计划,辅助优化SQL语句

4.正确的索引优化

索引的选择

1.经常被查询的列

2.经常用于表连接的列

3.经常排序分组的列

tips:假如想要选取name作为索引,先看一下表中name的值分布情况

select count(distinct name)/count(*) from talbe_name;

查询结果值越大,代表重复值很少,选择性更高,非常适合建立索引

索引总结

优点:

1.提高数据的检索效率

2.提高聚合函数的效率

3.提高排序的效率

4.使用覆盖索引可以避免回表查询

索引的禁忌:

1.选择性地的字段不要创建索引

2.很少查询的列不要创建索引

3.大数据类型列不要创建索引

4.不要使用NULL指定列的属性,最好为NOT NULL,然后用空字符串代替空值

索引失效的情况:

1.索引扫描的行记录超过全表30%,优化器不会走索引,而是全表扫描

2.联合索引中,第一个查询条件不是最左索引列

3.联合索引中,第一个查询条件使用范围查询(<,=,<=,between),只能使用到部分索引,有ICP出现

4.模糊查询以%开头

5.两个单列索引,一个用于检索,一个用于排序。这种情况只会用到一个索引。因为查询语句最多只能使用一个索引,考虑建立联合索引。

6.对索引使用函数计算,索引直接失效

posted @ 2020-12-15 14:46  vaen  阅读(122)  评论(0)    收藏  举报