总是在灾难发生后,才想起容灾的重要性。总是在吃过亏后,才记得曾经有人提醒过。

一,核心军规

  • 不在数据库做计算,cpu计算务必移至业务层

  • 控制单表数据量,单表记录控制在千万级

  • 控制列数量,字段数控制在20以内

  • 平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据

  • 拒绝3B(big),大sql,大事务,大批量

二,字段类军规

  • 用好数值类型
    tinyint(1Byte)
    smallint(2Byte)
    mediumint(3Byte)
    int(4Byte)
    bigint(8Byte)
    bad case:int(1)/int(11)

  • 有些字符转化为数字
    用int而不是char(15)存储ip

  • 优先使用enum或set
    例如:`sex` enum (‘F’, ‘M’)

  • 避免使用NULL字段
    NULL字段很难查询优化
    NULL字段的索引需要额外空间
    NULL字段的复合索引无效
    bad case:
    `name` char(32) default null
    `age` int not null
    good case:
    `age` int not null default 0

  • 不在数据库里存图片

三,索引类军规

  • 谨慎合理使用索引
    改善查询、减慢更新
    索引一定不是越多越好(能不加就不加,要加的一定得加)
    覆盖记录条数过多不适合建索引,例如“性别”

  • 字符字段必须建前缀索引

  • 不在索引做列运算
    bad case:
    select id where age +1 = 10;

  • innodb主键合理使用自增列
    主键建立聚簇索引
    主键不应该被修改
    字符串不应该做主键
    如果不指定主键,innodb会使用唯一且非空值索引代替

  • 不用外键,请由程序保证约束

四,sql类军规

  • sql语句尽可能简单
    一条sql只能在一个cpu运算
    大语句拆小语句,减少锁时间
    一条大sql可以堵死整个库

  • 简单的事务
    事务时间尽可能短
    bad case:
    上传图片事务

  • 避免使用触发器,用户自定义函数,请由程序取而代之

  • 不用select *
    消耗cpu,io,内存,带宽
    这种程序不具有扩展性

  • OR改写为IN()

  • OR改写为UNION

画外音:最新的mysql内核已经进行了相关优化

  • limit高效分页
    limit越大,效率越低
    select id from t limit 10000, 10;
    应该改为 =>
    select id from t where id > 10000 limit 10;

  • 使用union all替代union,union有去重开销

  • 尽量不用连接join

  • 务必请使用“同类型”进行比较,否则可能全表扫面

  • 打散批量更新

  • 使用新能分析工具
    show profile;
    mysqlsla;
    mysqldumpslow;
    explain;
    show slow log;
    show processlist;
    show query_response_time(percona)

mysql军规的更多相关文章

  1. MySQL 军规

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  2. ORM规约变更经典案例---mysql军规

    先介绍一下<MySQL数据库开发的三十六条军规>,这里只介绍核心的,具体内容大家可以自行百度,这是从底层开发人员到管理者必须知道规范.出自58赶集. 写在前面的话: 总是在灾难发生后,才想 ...

  3. mysql 军规 (转载)

    导语 来自一线的实战经验 每一条军规背后都是血淋淋教训 不要华丽,只要实用 若有一条让你受益,慰矣 主要针对数据库开发人员 总是在灾难发生后,才想起容灾的重要性 总是在吃过亏后,才记得曾经有人提醒过 ...

  4. 赶集mysql军规

    总是在灾难发生后,才想起容灾的重要性.总是在吃过亏后,才记得曾经有人提醒过. 一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数控制在2 ...

  5. MySQL军规升级版(转)

    一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字 ...

  6. 转载&修改:赶集mysql军规

    个人认为以下军规主要为了适应海量数据场景,对于业务复杂性系统并一定完全按照此军规   一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数 ...

  7. MySQL语句高效写法整理

    优先使用INNER JOIN 多表关联查询,扫描的行尽量少         关联的时候下条件减少扫描的行数 SELECT     ... FROM     ad_ad_summary_for_pos_ ...

  8. MySQL最佳实践

    一.核心军规         - 不在数据库做运算:cpu计算务必移至业务层         - 控制单表数据量:单表记录控制在1000w         - 控制列数量:字段数控制在20以内     ...

  9. MySQL 触发器的使用

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

随机推荐

  1. Classical Binary Search

    Find any position of a target number in a sorted array. Return -1 if target does not exist. 与题目 Firs ...

  2. spark(二)

    一.spark的提交模式 --master(standalone\YRAN\mesos) standalone:-client -cluster  如果我们用client模式去提交程序,我们在哪个地方 ...

  3. Qt实现截屏并保存(转载)

    原博地址:http://blog.csdn.net/qinchunwuhui/article/details/52869451?_t_t_t=0.28889142944202306 目前对应用实现截屏 ...

  4. The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - F 贪心+二分

    Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = { ...

  5. UESTC--1732

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1732 分析:dp,n个相同物品放入m个相同的盒子(允许为空)的个数为dp[n][m]=dp[n][m-1] ...

  6. UESTC--1267

    原题链接:http://www.acm.uestc.edu.cn/problem.php?pid=1267 分析:此题麻烦之处在于要输出最小最长上升子序列,关键在于如何解决最小这个问题. 我的做法是从 ...

  7. python自学笔记(一)

    我没学过python,通过网上和一些图书资料,自学并且记下笔记. 很多细节留作以后自己做项目时再研究,这样能更高效一些. python基础自学笔记 一.基本输入和输出 pthon3.0用input提示 ...

  8. C++ 局部静态变量,全局变量,全局静态变量,局部变量的区别和联系

    C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全局变量只需在一个源文件 ...

  9. I/O多路复用一些概念

    一.前言 在事件驱动模型中,我们说当程序遇到I/O操作时,注册 一个回调到事件循环中,主程序继续做其他事情.当I/O操作完成后,再切换回原来的任务.这就是说I/O操作是和程序本身没关系的,其实I/O操 ...

  10. 分块 (貌似能用LCT做,反正我现在还不会) BZOJ 2002

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 9844  Solved: 5070[Submi ...