用尽洪荒之力整理的Mysql数据库32条军规
写在前面的话:
总是在灾难发生后,才想起容灾的重要性;
总是在吃过亏后,才记得曾经有人提醒过。
核心军规
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条军规相关推荐
- mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)
今天上午吐血整理了 --------------------------------------------------------------split line------------------ ...
- mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规
写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. 核心军规 1.不在数据库做运算 cpu计算务必移至业务层 2.控制单表数据量 int型不超过1000w, ...
- mysql 数据库军规_Mysql数据库32条军规
核心军规 1.不在数据库做运算,cpu计算务必移至业务层 2.控制单表数据量 int型不超过1000w, 含char则不超过500w: 合理分表: 限制单库表数量在300以内: 3.控制列数量 字段少 ...
- mysql32位库_mysql数据库32位下载-mysql数据库32位【支持win10/win7】5.7.17 官方最新版-东坡下载...
mysql数据库在国内还是有很多的人都是在使用的,当然因为很多的系统都是不一样,就会出现很多的人需要不同系统的mysql数据库,下面的是为你免费的提供最新的mysql数据库32位,同时是支持win10 ...
- 58到家数据库30条军规解读(58沈剑)
58到家数据库30条军规解读(58沈剑) 2017年02月19日 21:30:56 阅读数:1463 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一 ...
- 58到家数据库30条军规解读 【转】
文章来源:58到家数据库30条军规解读 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务 ...
- 58到家数据库30条军规解读
军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 1.必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页 ...
- 数据库30条军规解读
军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...
- python flask源码解析_用尽洪荒之力学习Flask源码
[TOC] 一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见.最近正好时间充裕,决定试试做一下,并记录一下学习心得. 首先说明一下,本文研究的Flask版本是0.12. 首先做个小示例,在p ...
最新文章
- cdn对加速效果明显吗
- CSP-S2019游记
- 恢复mysql中root用户的所有权限_如何还原MySQL root用户的全部权限
- 支持与不支持in-place操作的OpenCV函数汇总
- 使用vue来开发一个下拉菜单组件(1)
- 汇编语言---判断字符
- 清空 visual studio 查找和替换的历史记录
- c svchost 服务 dll_小机巧丨如何解决svchost一直占用网速和内存?
- VS 2015 64位CMake编译openCV3.1.0必备文件
- Android 提高 5 SurfaceView绘图容器的基本使用
- Unity3d LED数码管单表控制/多表控制
- php_字符串按汉字拆分,php分割中文字符串
- zoom怎么解除静音_Zoom参会者入会后的注意事项
- 带农历日期的html代码,很全的显示阴历(农历)日期的js代码
- java类成员变量初始化_Java类变量和成员变量初始化过程
- (十三)Thread-Specific Storage(ThreadLocal)模式
- win10插入耳机没声音解决办法
- 拉网小调(民歌介绍)
- hbuilder怎么做登录界面_HBuilder如何安装和使用?(教程)
- 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)