SQL调优2.0

这是我第二篇写sql调优的博客。会有一些新东西。总的数据库优化是个很大的板块,大概分为三个部分

  1. 数据库服务器的内核优化(这个一般我们接触不到)
  2. my.cnf配置,搭配压力测试进行调试参数(目前我也没干过实际开发,所以得后面再写)
  3. sql语句调优(这个是这次博客的重点)

创建数据库表的时候

  • 选⼩不选⼤:
    ⼀般情况下选择可以正确存储数据的最⼩数据类型,越⼩的数据类型通常更快,占⽤磁盘,内存和CPU缓存更⼩。
  • 简单就好:
    简单的数据类型的操作通常需要更少的CPU周期,例如:整型⽐字符操作 代价要⼩得多,因为字符集和校对规则(排序规则)使字符⽐整型⽐较更加复杂。
  • 尽量避免NULL:
    尽量制定列为NOT NULL,除⾮真的需要NULL类型的值,有NULL的 列值会使得索引、索引统计和值⽐较更加复杂。
  • 浮点类型的建议统⼀选择decimal
  • 记录时间的建议使⽤int或者bigint类型,将时间转换为时间戳格式,如将时间转换为 秒、毫秒,进⾏存储,⽅便⾛索引
  • 明确的固定字段可以考虑使用enum

编写查询语句的时候

  • 在区分度⾼的字段上⾯建⽴索引可以有效的使⽤索引,区分度太低,⽆法有效的利⽤ 索引,可能需要扫描所有数据页,此时和不使⽤索引差不多
  • 联合索引注意最左匹配原则:必须按照从左到右的顺序匹配,mysql会⼀直向右匹配 直到遇到范围查询(>、<、between、like)就停⽌匹配
  • 查询记录的时候,少使⽤*,尽量去利⽤索引覆盖,可以减少回表操作,提升效率
  • 有些查询可以采⽤联合索引,进⽽使⽤到索引下推(IPC),也可以减少回表操作, 提升效率
  • 禁⽌对索引字段使⽤函数、运算符操作,会使索引失效
  • 字符串字段和数字⽐较的时候会使索引⽆效
  • 模糊查询'%值%'会使索引⽆效,变为全表扫描,但是'值%'这种可以有效利⽤索引
  • 排序中尽量使⽤到索引字段,这样可以减少排序,提升查询效率
  • 根据实际情况选择子查询或者连接查询。一般情况连接查询会好一点。

语句编写完成后

  • 缓存的应用
posted @ 2020-11-01 18:44  大嘤熊  阅读(104)  评论(0编辑  收藏  举报