- 1. sql性能下降的原因
- 1. SQL语句写的烂
- 2. 索引失效
- 3. 使用太多的join
- 1. 最左前缀法则:如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
- 2. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
- 3. 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*
- 4. mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
- 5. is null ,is not null 也无法使用索引
- 6. like以通配符开头(‘%abc…’ )mysql索引失效会变成全表扫描的操作
- 7. 字符串不加单引号索引失效
- 8. 少用or,用它来连接时会索引失效
- 1. 频繁查询的字段要创建索引
- 2. 排序的字段创建索引,大大提高效率
- 3. 查询中与其他表关联的字段,创建外键索引
- 4. 频繁更新的字段不适合键索引
- 5. where条件用不到的字段不适合键索引
- 1. 频繁更新的表不适合创建索引,因为提高了查询速度,但是降低了更新速度,在更新的时候,不仅要保存数据文件,还要保存索引文件
- 2. 表记录太少,不适合创建索引
- 3. 一个字段下有太多的重复内容,不适合创建索引
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. 一个字段下有太多的重复内容,不适合创建索引
