数据库调优

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

 调优方式

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

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

  • 使用覆盖索引

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

  • 联合索引

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

  • 遵循最左匹配原则

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

  • 索引字段过长怎么处理

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

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

    这样会导致索引失效

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

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

posted @   致力于工作  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示