SQL索引优化

没有最好的优化、只有最适合的优化

1.单表优化

新建索引+删除索引

2.双标优化

连接相反建

3.多表优化

尽量减少Join语句中NestedLoop的循环总次数;“永远用小结果集驱动大结果集”;优先优化NestedLoop的内层循环;保证Join语句中被驱动表上Join条件字段已经被索引;当无法保证被驱动表的Join条件字段被索引且内存资源充足的条件下,不要太吝惜JoinBuffer的设置

4.避免索引失效

1>全值匹配我最爱

2>最佳左前缀法则

如果索引了多列,要遵循最左前缀法则。指的是查询从索引的最左边前列开始别切不要跳过索引中的列。

3>不在索引列上做任何操作(计算、函数、类型转换),会导致失效而转向全表扫描

4>存储引擎不能使用索引中范围条件右边的列

5>尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少Select *

6>mysql在使用不等于或者大于小于的时候无法使用索引会导致全表扫描

7>is null,is not null也无法使用索引

8>like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描操作

9>字符串不加单引号索引会失效

10>少用or,用它来连接索引会失效

5.排序优化

1.永远小表驱动大表(in和exist)

SELECT…FROM TABLE WHERE EXISTS(SUBQUERY)
该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE OR FALSE)来决定主查询的数据结果是否得以保留

2.尽量使用索引排序,避免使用filesort排序

3.尽量

6.数据库优化的workflow

1.慢查询的开启并捕获

2.explain+慢sql分析

3.show profile查询sql在mysql服务器里面的执行细节和生命周期情况

4.sql数据库服务器的参数优化

你可能感兴趣的:(SQL索引优化)