1. sql性能下降的原因

1. SQL语句写的烂

2. 索引失效

3. 使用太多的join

2. 索引优化

1. 最左前缀法则:如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

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

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

4. mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

5. is null ,is not null 也无法使用索引

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

问题:解决like ‘%字符串%’时索引不被使用的方法? 使用覆盖索引

7. 字符串不加单引号索引失效

8. 少用or,用它来连接时会索引失效

3. 什么时候需要索引

1. 频繁查询的字段要创建索引

2. 排序的字段创建索引,大大提高效率

3. 查询中与其他表关联的字段,创建外键索引

4. 频繁更新的字段不适合键索引

5. where条件用不到的字段不适合键索引

4. 什么时候不需要索引

1. 频繁更新的表不适合创建索引,因为提高了查询速度,但是降低了更新速度,在更新的时候,不仅要保存数据文件,还要保存索引文件

2. 表记录太少,不适合创建索引

3. 一个字段下有太多的重复内容,不适合创建索引