分类: Linux

 
写在前面的话:
总是在灾难发生后,才想起容灾的重要性;
总是在吃过亏后,才记得曾经有人提醒过。
(一)核心军规
(1)不在数据库做运算
   cpu计算务必移至业务层;
(2)控制单表数据量
   int型不超过1000w,含char则不超过500w;
   合理分表;
   限制单库表数量在300以内;
(3)控制列数量
   字段少而精,字段数建议在20以内;
(4)平衡范式与冗余
   效率优先;
   往往牺牲范式;
(5)拒绝3B
   拒绝大sql语句:big sql
   拒绝大事物:big transaction
   拒绝大批量:big batch
 
(二)字段类军规
(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)不在数据库里存图片
    这个我不能理解!
    但这是赶集网的经验,求detail!
 
(三)索引类军规
(12)谨慎合理使用索引
    改善查询、减慢更新;
    索引一定不是越多越好(能不加就不加,要加的一定得加);
    覆盖记录条数过多不适合建索引,例如“性别”;
(13)字符字段必须建前缀索引
(14)不在索引做列运算
!!!不只是索引,都不能做列运算吧!!!
    bad case:
    select id where age +1 = 10;
(15)innodb主键推荐使用自增列;
    主键建立聚簇索引;
    主键不应该被修改;
    字符串不应该做主键;
    如果不指定主键,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】赶集网mysql开发36条军规的更多相关文章

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

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

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

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

  3. MySQL开发36条军规

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

  4. 赶集网mysql开发36军规

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

  5. MySQL 数据库开发的 36 条军规

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

  6. 【转】赶集网mysql开发36军规

    原文链接:https://segmentfault.com/a/1190000004711147 写在前面的话:总是在灾难发生后,才想起容灾的重要性:总是在吃过亏后,才记得曾经有人提醒过. (一)核心 ...

  7. 使用ThinkPHP开发中MySQL性能优化的最佳21条经验

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  8. 用尽洪荒之力整理的Mysql数据库32条军规(转)

    今天上午吐血整理了Oracle SQL性能优化的40条军规,其中很多规则也是适用于Mysql的,结果今晚发现这一篇文章——用尽洪荒之力整理的Mysql数据库32条军规,和我的竟有异曲同工之妙,当然不同 ...

  9. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

随机推荐

  1. Windows环境下Sybase12.5 图文安装教程

    先准备好安装文件,解压缩ASE install.rar文件,文件夹中包含一个setup.exe可执行文件,双击运行 --- > 欢迎界面出现 下面选择相应国家的协议,我们选择“中华人民共和国”, ...

  2. Oracle数据库表设计时的注意事项

    表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...

  3. hihoCoder挑战赛14 -1223

    描述 给定n个关于X的不等式,问最多有多少个成立. 每个不等式为如下的形式之一: X < C X <= C X = C X > C X >= C 输入 第一行一个整数n. 以下 ...

  4. 编程中、遇到问题、bug多思考

    偶然间看到一篇很好的文章,关于编程过程中的思考. http://www.cnblogs.com/dongqingswt/archive/2012/12/26/2834675.html#3457256 ...

  5. 2016 Multi-University Training Contest 7

    6/12 2016 Multi-University Training Contest 7 期望 B Balls and Boxes(BH) 题意: n个球放到m个盒子里,xi表示第i个盒子里的球的数 ...

  6. Lucene学习总结:全文检索的基本原理

    一.总论 根据http://lucene.apache.org/java/docs/index.html定义: Lucene是一个高效的,基于Java的全文检索库. 所以在了解Lucene之前要费一番 ...

  7. 一只小蜜蜂...[HDU2044]

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. BZOJ3290 : Theresa与数据结构

    CANCEL操作可以看作删点,X坐标可以离散化 将询问按Z坐标差分,转化成两个求Z<=某个数的和的询问 将操作CDQ分治 每次将前一半的修改.后一半的查询按照Z坐标排序 然后扫描线,每到一个询问 ...

  9. BZOJ3827 : [Poi2014]Around the world

    把环倍长,破环成链 设f[i]表示i一次性能飞达的最右边的点,因为f[]单调递增,所以可以$O(n)$求出 这样就形成了一个树结构,对于每个节点,在其到根节点路径上二分出深度最大的点,使得其飞过一圈 ...

  10. 洛谷 P1118 数字三角形游戏 Label:dfs

    题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一 ...