写在前面的话:

总是在灾难发生后,才想起容灾的重要性;

总是在吃过亏后,才记得曾经有人提醒过。

核心军规

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 nullgood 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主键推荐使用自增列;

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

16、不用外键

请由程序保证约束;

sql类军规

17、sql语句尽可能简单

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

18、简单的事务

事务时间尽可能短;

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′unionselect id from t where name=’jonh’

23、避免负向%

24、慎用count(*)

25、limit高效分页

limit越大,效率越低

select id from t limit 10000, 10;=>select id from t where id > 10000 limit 10;

26、使用union all替代union

union有去重开销

27、少用连接join

28、少用group by

分组;
自动排序;

29、请使用同类型比较

30、使用load data导数据

load data比insert快约20倍;

31、打散批量更新

32、新能分析工具

show profile;mysqlsla;mysqldumpslow;explain;show slow log;show processlist;show query_response_time(percona);

用尽洪荒之力整理的Mysql数据库32条军规相关推荐

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

    今天上午吐血整理了 --------------------------------------------------------------split line------------------ ...

  2. mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规

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

  3. mysql 数据库军规_Mysql数据库32条军规

    核心军规 1.不在数据库做运算,cpu计算务必移至业务层 2.控制单表数据量 int型不超过1000w, 含char则不超过500w: 合理分表: 限制单库表数量在300以内: 3.控制列数量 字段少 ...

  4. mysql32位库_mysql数据库32位下载-mysql数据库32位【支持win10/win7】5.7.17 官方最新版-东坡下载...

    mysql数据库在国内还是有很多的人都是在使用的,当然因为很多的系统都是不一样,就会出现很多的人需要不同系统的mysql数据库,下面的是为你免费的提供最新的mysql数据库32位,同时是支持win10 ...

  5. 58到家数据库30条军规解读(58沈剑)

    58到家数据库30条军规解读(58沈剑) 2017年02月19日 21:30:56 阅读数:1463 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一 ...

  6. 58到家数据库30条军规解读 【转】

    文章来源:58到家数据库30条军规解读 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务 ...

  7. 58到家数据库30条军规解读

    军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 1.必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页 ...

  8. 数据库30条军规解读

    军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...

  9. python flask源码解析_用尽洪荒之力学习Flask源码

    [TOC] 一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见.最近正好时间充裕,决定试试做一下,并记录一下学习心得. 首先说明一下,本文研究的Flask版本是0.12. 首先做个小示例,在p ...

最新文章

  1. cdn对加速效果明显吗
  2. CSP-S2019游记
  3. 恢复mysql中root用户的所有权限_如何还原MySQL root用户的全部权限
  4. 支持与不支持in-place操作的OpenCV函数汇总
  5. 使用vue来开发一个下拉菜单组件(1)
  6. 汇编语言---判断字符
  7. 清空 visual studio 查找和替换的历史记录
  8. c svchost 服务 dll_小机巧丨如何解决svchost一直占用网速和内存?
  9. VS 2015 64位CMake编译openCV3.1.0必备文件
  10. Android 提高 5 SurfaceView绘图容器的基本使用
  11. Unity3d LED数码管单表控制/多表控制
  12. php_字符串按汉字拆分,php分割中文字符串
  13. zoom怎么解除静音_Zoom参会者入会后的注意事项
  14. 带农历日期的html代码,很全的显示阴历(农历)日期的js代码
  15. java类成员变量初始化_Java类变量和成员变量初始化过程
  16. (十三)Thread-Specific Storage(ThreadLocal)模式
  17. win10插入耳机没声音解决办法
  18. 拉网小调(民歌介绍)
  19. hbuilder怎么做登录界面_HBuilder如何安装和使用?(教程)
  20. 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)

热门文章

  1. python安全攻防---scapy使用
  2. python---文件处理
  3. UVA 1160——X-Plosives
  4. uva 1623——Enter The Dragon
  5. openjudge基础题3计算书费
  6. C语言模拟实现标准库函数之strstr()
  7. pip3 便捷安装包
  8. 类的成员函数可以访问属于该类的任意对象的私有变量
  9. 【C++学习笔记一】C++类和对象详解
  10. C++11 标准新特性:委派构造函数