原文链接:https://segmentfault.com/a/1190000004711147

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

(一)核心军规
  (1)不在数据库做运算:cpu计算务必移至业务层
  (2)控制单表数据量:单表记录控制在1000w
  (3)控制列数量:字段数控制在20以内
  (4)平衡范式与冗余:为提高效率牺牲范式设计,冗余数据
  (5)拒绝3B:拒绝大sql,大事物,大批量

(二)字段类军规
  (6)用好数值类型
    tinyint(1Byte)
    smallint(2Byte)
    mediumint(3Byte)
    int(4Byte)
    bigint(8Byte)
    bad case:int(1)/int(11)
  (7)字符转化为数字
    用int而不是char(15)存储ip
  (8)优先使用enum或set
    例如:sex enum (‘F’, ‘M’)
  (9)避免使用NULL字段
    NULL字段很难查询优化
    NULL字段的索引需要额外空间
    NULL字段的复合索引无效
    bad case:
      name char(32) default null
      age int not null
    good case:
      age int not null default 0
  (10)少用text/blob
    varchar的性能会比text高很多
    实在避免不了blob,请拆表
  (11)不在数据库里存图片:是否需要解释?

(三)索引类军规
  (12)谨慎合理使用索引
    改善查询、减慢更新
    索引一定不是越多越好(能不加就不加,要加的一定得加)
    覆盖记录条数过多不适合建索引,例如“性别”
  (13)字符字段必须建前缀索引
  (14)不在索引做列运算
    bad case:
      select id where age +1 = 10;
  (15)innodb主键推荐使用自增列(SK:博主不认可)
    主键建立聚簇索引
    主键不应该被修改
    字符串不应该做主键
    如果不指定主键,innodb会使用唯一且非空值索引代替
  (16)不用外键
    请由程序保证约束

(四)sql类军规
  (17)sql语句尽可能简单
    一条sql只能在一个cpu运算
    大语句拆小语句,减少锁时间
    一条大sql可以堵死整个库
  (18)简单的事务
    事务时间尽可能短
    bad case:
      上传图片事务
  (19)避免使用trig/func
    触发器、函数不用
    客户端程序取而代之
  (20)不用select *
    消耗cpu,io,内存,带宽
    这种程序不具有扩展性
  (21)OR改写为IN()
    or的效率是n级别
    in的消息时log(n)级别
    in的个数建议控制在200以内
    select id from t where phone=’159′ or phone=’136′;
      =>
    select id from t where phone in (’159′, ’136′);
  (22)OR改写为UNION
    mysql的索引合并很弱智
    select id from t where phone = ’159′ or name = ‘john’;
    =>
    select id from t where phone=’159′
      union
    select id from t where name=’jonh’
   (23)避免负向%
  (24)慎用count(*)
  (25)同上
  (26)limit高效分页
    limit越大,效率越低
    select id from t limit 10000, 10;
      =>
    select id from t where id > 10000 limit 10;
  (27)使用union all替代union
    union有去重开销
  (28)少用连接join
  (29)使用group by
    分组
    自动排序
  (30)请使用同类型比较
  (31)使用load data导数据
    load data比insert快约20倍;
  (32)打散批量更新
  (33)性能分析工具
    show profile;
    mysqlsla;
    mysqldumpslow;
    explain;
    show slow log;
    show processlist;
    show query_response_time(percona)

【转】赶集网mysql开发36军规的更多相关文章

  1. 赶集网mysql开发36军规

    赶集网mysql开发36军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 (2)控 ...

  2. 【MySql】赶集网mysql开发36条军规

    [MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux   写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...

  3. [赶集网] 【MySql】赶集网mysql开发36条军规

    [赶集网] [MySql]赶集网mysql开发36条军规 (一)核心军规(1)不在数据库做运算   cpu计算务必移至业务层:(2)控制单表数据量   int型不超过1000w,含char则不超过50 ...

  4. 赶集网mysql开发36条军规

    写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算    cpu计算务必移至业务层: (2)控制单表数据量    i ...

  5. MySQL开发36条军规

    转载地址:http://blog.itpub.net/22664653/viewspace-723506/ 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过 ...

  6. 慕课网--mysql开发技巧一 学习笔记

    现在存在下面的两张表,表的结构如下所示 师徒四人表结构:id,user_name,over数据:id user_name over1 唐僧 旃檀功德佛2 猪八戒 净坛使者3 孙悟空 斗战胜佛4 沙僧 ...

  7. 手机网游开发指南 - 需要多NB的技术

    Agent`K 似乎在三天打鱼N天晒网.只能呵呵了,懒散的家伙. 移动互联网越来越火,其中的网络游戏更是火,熊熊大火. 作为攻城师的你,作为小投资者的你,作为满脑子创意想要实现的你,肯定在四处打听:手 ...

  8. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  9. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

随机推荐

  1. (转)Java 详解 JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...

  2. 如何生成可变表头的excel

    1.实现功能: 传入一个表头和数据,将数据导入到excel中. 为了便于项目的扩展,数据传入通过泛型集合传入,获取数据时,通过反射的方式获取,这样无论你的表头是多少项,我都能很方便的生成.另外为了便于 ...

  3. TCP的关闭,到底是几次握手,每次的标志位到底是什么!

    做题的时候遇到一个问题,TCP关闭的时候到底是三次还是四次握手,如果是三次,少了哪部分?   按照 <计算机网络> -第五版-谢希仁       然而对于TCP关闭, 有的地方能找到   ...

  4. Spark standlone安装与配置

    spark的安装简单,去官网下载与集群hadoop版本相一致的文件即可. 解压后,主要需要修改spark-evn.sh文件. 以spark standlone为例,配置dn1,nn2为master,使 ...

  5. Device ehth0 is not present

    context: 使用virtualbox 克隆了一个新硬盘,然后配为新建虚机的使用,但ifconfig只能发现lo,没有eth0 解决方案: 当前系统是centos6.6 cd /etc/udev/ ...

  6. line-height1.5和line-height:150%的区别

    一.区别 区别体现在子元素继承时,如下: 父元素设置line-height:1.5会直接继承给子元素,子元素根据自己的font-size再去计算子元素自己的line-height. 父元素设置line ...

  7. Bash的自动补全

    内置补全命令 Bash内置两个补全命令,分别是compgen和complete.compgen命令根据不同的参数,生成匹配单词的候选补全列表,例子如下: monster@monster-Z:~$ co ...

  8. Serializable

    import java.io.*;    public class  Box implements Serializable   {       private int width;       pr ...

  9. ArrayList实现线程安全的blogs

    ArrayList是线程不安全的,轻量级的.如何使ArrayList线程安全? 1.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchro ...

  10. Unity自动构建

    Jenkins/Hudson Jenkins的前身是Hudson(Sun开发),2010年从Hudson分支出来.由于Sun被Oracle收购,Oracle声称拥有Hudson的商标所有权,Hudso ...