数据库优化

废话不多说,直接上内容

优化基本手段

  • 说明:计算机性能的瓶颈通常在于磁盘的IO
  • 手段:
    • 进行架构的调整
    • 进行硬件提升
    • 减少磁盘IO
    • 优化SQL语句
    • 合理的数据库设计

数据库设计

  • 存储引擎选择: 根据需要选择合适的引擎
  • 数据表的设计
    • 第一范式:表的所有字段都是不可再分割的,称为满足第一范式,记为1NF

       用户ID 用户名 手机号 地址
       优化后:
       用户ID 用户名 手机号 省份 城市 详细地址
      
    • 第二范式:表的字段之间没有部分依赖时,称为满足第二范式,记为2NF

      优化前:
      学号 姓名 年龄 课程号 课程名称 课程分数
      优化后:
      学号 姓名 年龄
      课程号 课程名称
      学号 课程号 课程分数
      
    • 第三范式:表的字段之间没有传递依赖时,称为满足第三范式,记为3NF

      优化前:
      学号 姓名 年龄 性别 所在院校 院校地址 院校电话
      优化后:
      学号 姓名 年龄 性别 院校代号
      院校代号 院校名称 院校地址 院校电话
      
    • 总结:有时我们会根据业务的需要进行反范式设计,通过适当的冗余以减少关联查询

  • 使用字段索引
    • 根据需要添加合适的字段索引

优化SQL语句

  • 慢查询
    • 说明:mysql自带功能,默认是关闭,开启后会记录执行较慢的SQL语句
    • 作用:定位耗时的SQL语句
  • explain
    • 说明:查询执行计划,可以查看语句的执行情况
      示例:explain select * from student where id>3\G;
  • 优化示例(思路):
    • 尽量不要使用select * 查询,需要什么字段就查询什么字段
    • 需要多少数据就去多少数据,可以使用limit来进行限制
    • 尽量避免复杂的join或子查询
    • 禁止结果集自动排序:分组后结果集会自动排序,使用order by null可以阻止自动排序

减少磁盘的IO

  • 说明:简单理解就是使用缓存技术替代或者减少数据库的读写
  • 原理:
    请求到来,先检查缓存中是否有相关数据,有缓存数据直接返回,若没有,则从数据库中读取,然后保存到缓存中再返回数据

进行硬件提升

  • 说明:当资源使用效率足够高,但依然不能满足要求,可以选择提升硬件配置

进行架构调整

  • 单台服务器架构
  • 数据库读写分离
  • 高可用负载均衡

你可能感兴趣的:(数据库优化)