mysql优化

基础:

  • InnoDB,utf8
  • 禁止使用存储过程,视图,触发器,Event
  • 禁止在数据库中存储大文件,例如照片,可以将大文件存储在对象存储系统,数据库中存储路径
  • 禁止在线上环境做数据库压力测试
  • 测试,开发,线上数据库环境必须隔离

规范:

  • 表必须有主键,推荐使用 UNSIGNED 整数为主键,删除无主键的表,如果是 row 模式的主从架构,从库会挂住

  • 禁止使用外键,如果要保证完整性,应由应用程式实现,外键使得表之间相互耦合,影响 update/delete 等 SQL 性能,有可能造成死锁,高并发情况下容易成为数据库瓶颈

  • 字段定义为 NOT NULL 并设默认值,NULL 的列使用索引,索引统计,值都更加复杂,MySQL 更难优化,NULL 需要更多的存储空间,NULL 只能采用 IS NULL 或者 IS NOT NULL ,而在 =/!=/in/not in 时有大坑

  • 使用 INT UNSIGNED 存储 IPv4 ,不要用 char(15)
  • 使用 TINYINT 来代替 ENUMENUM 增加新值要进行 DDL 操作

 索引规范:

  • 唯一索引使用 uniq_[字段名] 来命名
  • 非唯一索引使用 idx_[字段名] 来命名
  • 非必要不要进行 JOIN 查询,如果要进行 JOIN 查询,被 JOIN 的字段必须类型相同,并建立索引,踩过因为 JOIN 字段类型不一致,而导致全表扫描的坑么?
  • 理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)

sql规范:

  • 禁止 select * 
  • 禁止在 where 条件列使用函数或者表达式
  • 禁止负向查询以及 % 开头的模糊查询
  • 隐式类型转换会使索引失效,导致全表扫描
  • 禁止大表 JOIN 和子查询
  • 同一个字段上的 OR 必须改写问 ININ 的值必须少于 50 个
  • 应用程序必须捕获 SQL 异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值