mysql开发中的一些规则

1、范式的理解https://www.cnblogs.com/ktao/p/7775100.html
2、核心的规则

  1. 尽量不在数据库做运算 md5() / Order by Rand()

  2. 控制单表数据量
    一年内的单表数据量预估
     纯INT不超1000W
     含CHAR不超500W
    • 合理分表不超载
     USERID
     DATE
     AREA

  3. 保持表身段苗条
    表字段数少而精
    √ IO高效 √全表遍历 √表修复快
    √提高幵发 √alter table快
    • 单表多少字段合适?
    • 单表1G体积 500W行评估
    顺序读1G文件需N秒
    单行丌赸过200Byte
    单表丌赸50个纯INT字段
    单表丌赸20个CHAR(10)字段
    • 单表字段数上限控制在20~50个

  4. 平衡是门艺术
    效率优先、提升性能,适当时牺牲范式、加入冗余

  5. 拒绝3B
     大SQL (BIG SQL)
     大事务 (BIG Transaction)
     大批量 (BIG Batch)

3、字段类型规则

  1. 用好数值字段类型
    根据实际情况选择相应的字段类型
  2. 将字符转化为数字
    如果是可以使用数字优先使用数字字段
     更高效 查询更快 占用空间
  3. 优先使用枚举ENUM/SET (字符串 可能值已知且有限)
    sex enum(‘F’,‘M’) COMMENT ‘性别’
  4. 避免使用NULL字段
    很难进行查询优化
    NULL列加索引,需要额外空间
    含NULL复合索引无效
    c int(10) NOT NULL DEFAULT 0
  5. 少用幵拆分TEXT/BLOB
    TEXT类型处理性能远低亍VARCHAR
    若必须使用则拆分到单独的表
  6. 不在数据库存图片

4、索引类规则

  1. 谨慎添加索引
    改善查询
    减慢更新
    索引不是越多越好

  2. 能不加索引尽量不加索引
    最好不超字段的20%

  3. 不在索引列作运算

  4. 尽量不使用外键,用程序控制外键关系

5、sql规则

  1. SQL语句尽可能简单
    拒绝大SQL,拆解成多条简单SQL

  2. 保持事务(连接)短小
    事务/连接使用原则:即开即用,用完即关
    不事务无关操作放到事务外面, 减少锁资源的占用
    丌破坏一致性前提下,使用多个短事务代替长事务

  3. 尽可能避免使用SP/TRIG/FUNC

    尽可能少用存储过程
    尽可能少用触发器
    减用使用MySQL凼数对结果进行处理

  4. 尽量不用 SELECT * from table

  5. 改写OR语句
    同一字段,将or改写为in()
    OR效率:O(n) •
    IN 效率:O(Log n)
    当n很大时,OR会慢很多
    注意控制IN的个数,建议n小亍200
    不同字段改写OR为UNION

  6. 避免负向查询和% 前缀模糊查询
    避免负向查询  NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、 NOT LIKE等
    避免 % 前缀模糊查询  B+ Tree  使用丌了索引  导致全表扫描

  7. 减少COUNT(*) • LIMIT的高效分页

  8. • 用UNION ALL 而非 UNION
    若无需对结果进行去重,则用UNION ALL  UNION有去重开销

  9. • 分解联接保证高幵发
    减少连表

  10. • GROUP BY 去除排序
    特定排序:Group by DESC/ASC

  11. • 同数据类型的列值比较
    字段:remark varchar(50) NOT NULL COMMENT ‘备注, 默认为空’,
    MySQL>SELECT id, gift_code FROM gift WHERE deal_id = 640 AND remark=115127; 1 row in set (0.14 sec)
    MySQL>SELECT id, gift_code FROM pool_gift WHERE deal_id = 640 AND remark=‘115127’; 1 row in set (0.005 sec)

  12. Load data导数据
    批量数据快导入:  成批装载比单行装载更快,丌需要每次刷新缓存  无索引时装载比索引装载更快  Insert values ,values,values 减少索引刷新  Load data比insert快约20倍
    • 尽量丌用 INSERT … SELECT  延迟  同步出错

  13. 打散大批量更新
    • 大批量更新凌晨操作,避开高峰
    • 凌晨丌限制 • 白天上限默认为100条/秒(特殊再议)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值