mysql 数据库军规_MySQL 数据库开发的 36 条军规
写在前面的话:
总是在灾难发生后,才想起容灾的重要性;
总是在吃过亏后,才记得曾经有人提醒过。
(一)核心军规
(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 数据库军规_MySQL 数据库开发的 36 条军规相关推荐
- MySQL数据库开发的 36 条军规
转载自 MySQL数据库开发的 36 条军规 核心军规 尽量不在数据库做运算 控制单表数据量 纯INT不超过10M条,含Char不超过5M条 保持表身段苗条 平衡范式和冗余 拒绝大SQL,复杂事务, ...
- mysql数据库开发的36条军规
前言 一般的小项目,比如几百人左右访问的项目,访问量几万的项目,如果想用缓存,单机实例完全够用.小黄图就是用的阿里云256MB配置的Redis缓存,日几千的访问量是妥妥够用的了.Redis号称可以支撑 ...
- 「Mysql数据库」MySQL数据库开发的 36 条军规!
2019独角兽企业重金招聘Python工程师标准>>> 核心军规 尽量不在数据库做运算 控制单表数据量 纯INT不超过10M条,含Char不超过5M条 保持表身段苗条 平衡范式和冗余 ...
- 有效软件开发的25条军规
作者 | Allen Holub 译者 | 马超 出品 | CSDN(ID:CSDNnews) 今天笔者在外文的技术博客上看到了一个非常亮眼的建议合集,整理一下姑且起名叫有效软件开发的25条军规,下面 ...
- 产品读书《创业36条军规》
<创业36条军规>PPT 刘润读书笔记 孙陶然先生是中国最成功的连续创业者之一,本书出版之后加印多次,被奉为创业者的圣经.我读这本书的目的并不是为了鼓励自己创业,而是以此来认清自己的条件. ...
- 书摘---创业36条军规5:如何选择创业方向
本文继续前面系列的内容,下面重点摘录创业36条军规书中的第五部分:如何选择创业方向 分两部分 一.做最肥的市场 如果有可能,创业要选择最肥的市场入手,在一个大市场里占小份额要比在一个小市场里占大份额要 ...
- 高性能网页开发的14条军规
高性能网页开发的14条军规 作者:Yahoo! 来源:西风坊 酷勤网收集 2008-05-13 摘要 酷勤网 1. 尽可能的减少 HTTP 的请求数 2. 使用 CDN(Content Deliver ...
- mysql数据库财务_MySQL数据库——从入门到删库跑路(二)
DQL 查询表中的记录 select .... from ..... 语法 select 需要查询的信息(列名1,列名2,.......列名n) / * from 表名 [where 条件]; 完善下 ...
- mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...
最新文章
- mc有什么红石机器人_mc:作为一个mc萌新应该掌握哪些基本功?还需要知道些什么?...
- 第三方服务整合-阿里云OSS上传文件-填坑
- CSS3属性——(一)
- 接口测试 java_接口测试--Java
- 处理器startup.s 常见汇编指令,伪指令解释 .globl _start .section .data .text .align
- 《计算机网络》第三章:数据链路层(The Data Link Layer)
- 区块链 怎么设置区块最大交易容量
- Javaweb免费RDP报表工具常用函数的用法总结
- 阿里 计算机底层架构原理 pdf,完美起航-震撼!8位阿里大牛编写的2500页计算机底层架构原理解析,香香香...
- 十本Java网站开发必看书籍
- 音乐标签修改 android,音乐标签Android版
- dhuacm出题网站搭建
- 软件工程导论第九到十二章章节复习总结附思维导图
- 论二级域名收集的各种姿势
- Qt QPainter::end: Painter ended whith 2 saced states
- 机器学习:导数与偏导数的区别.
- war包和jar包的区别
- net::ERR_ABORTED 404 (Not Found)
- 解析淘宝淘口令获取商品ID方法说明
- 使用python,目前最全的Python使用手册
热门文章
- python 统计素数并求和
- 如何判断1024!末尾有多少个0
- 论文介绍《CrowdFormer: An Overlap Patching Vision Transformer for Top-Down Crowd Counting 》
- P5723 【深基4.例13】质数口袋
- 前端开发精华网站(强烈推荐!)
- 彻底解决烦人的win10更新
- 理解 PHP 8 的 JIT
- PDF/OCR识别提取工具:Readiris Pro 17 for Mac
- kali流量转发后依然断网_三大运营商的无限流量卡,哪家的网速最快,看完千万别选错了...
- pstack使用和原理