数据库调优

致力于工作 / 2023-05-12 / 原文

首先在调优之前,必然是因为某一个sql查询慢,影响性能,才会存在调优。
数据库调优之前,测试sql真正的响应时间,需要排除数据库的缓存干扰,因为缓存的存在,并不能真正的显示查询出sql的响应时间

 

  • 使用执行计划Explain,分析sql在数据库的执行情况

type字段:这条执行计划中的连接类型,all全表扫描,index索引扫描,range范围扫描等
rows: 表示该条执行计划中需要扫描的行数
Extra: 表示该条执行计划中的额外信息,通常会显示使用了哪个索引或者排序方式等等

  • 使用覆盖索引

就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖
要求查询的字段比较少

  • 联合索引

查询常见的字段时,并存在多个,可以将多个字段一起建立联合索引,可以避免全表扫描

  • 遵循最左匹配原则

在进行模糊查询的时候,都尽量遵循 like ‘字段%’;这样查询能利用到索引

  • 索引字段过长怎么处理

1.使用前缀索引 :前缀索引是指只对字段的前面几个字符建立索引,而不是对整个字段建立索引。这样可以减少索引占用的内存,提高索引效率,从而优化数据库的性能。
2.使用哈希索引:哈希索引是指对字段进行哈希计算后建立的索引。由于哈希索引不存储实际的值,而是存储哈希值,因此可以节省索引占用的内存。但是哈希索引只能用于等值查询,而不能用于范围查询。
3.使用多列索引:多列索引是指对多个字段建立的联合索引。当唯一索引字段过长时,可以考虑将其与其他字段一起建立索引,从而减少索引占用的内存,提高索引效率。

  • 避免查询的时候,一些字段进行函数操作

这样会导致索引失效

  • 查询数据的时候,避免字段的隐式类型转换

字符类型的数字,查询的时候,使用数字类型,就默认会进行隐式转换
select * from t where id = 1 ,如果id是字符类型的,1是数字类型的