首先在调优之前,必然是因为某一个sql查询慢,影响性能,才会存在调优。
数据库调优之前,测试sql真正的响应时间,需要排除数据库的缓存干扰,因为缓存的存在,并不能真正的显示查询出sql的响应时间
- 使用执行计划Explain,分析sql在数据库的执行情况
type字段:这条执行计划中的连接类型,all全表扫描,index索引扫描,range范围扫描等
rows: 表示该条执行计划中需要扫描的行数
Extra: 表示该条执行计划中的额外信息,通常会显示使用了哪个索引或者排序方式等等
- 使用覆盖索引
就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖
要求查询的字段比较少
- 联合索引
查询常见的字段时,并存在多个,可以将多个字段一起建立联合索引,可以避免全表扫描
- 遵循最左匹配原则
在进行模糊查询的时候,都尽量遵循 like ‘字段%’;这样查询能利用到索引
- 索引字段过长怎么处理
1.使用前缀索引 :前缀索引是指只对字段的前面几个字符建立索引,而不是对整个字段建立索引。这样可以减少索引占用的内存,提高索引效率,从而优化数据库的性能。
2.使用哈希索引:哈希索引是指对字段进行哈希计算后建立的索引。由于哈希索引不存储实际的值,而是存储哈希值,因此可以节省索引占用的内存。但是哈希索引只能用于等值查询,而不能用于范围查询。
3.使用多列索引:多列索引是指对多个字段建立的联合索引。当唯一索引字段过长时,可以考虑将其与其他字段一起建立索引,从而减少索引占用的内存,提高索引效率。
- 避免查询的时候,一些字段进行函数操作
这样会导致索引失效
- 查询数据的时候,避免字段的隐式类型转换
字符类型的数字,查询的时候,使用数字类型,就默认会进行隐式转换
select * from t where id = 1 ,如果id是字符类型的,1是数字类型的