文档章节

mysql开发36条军规

Doublec
 Doublec
发布于 2015/05/11 16:51
字数 892
阅读 406
收藏 87
点赞 1
评论 0

写在前面的话:

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

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

(一)核心军规

(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);


本文转载自:http://blog.itpub.net/22664653/viewspace-723506/

共有 人打赏支持
Doublec
粉丝 10
博文 23
码字总数 5032
作品 0
高级程序员
MySQL数据库开发的赶集网三十六条军规

MySQL数据库开发的三十六条军规 View morepresentations frommysqlops

鉴客
2011/11/13
5.2K
16
DBA的40条军规

作者介绍 贺春旸,普惠金融MySQL专家,《MySQL管理之道》第一版、第二版作者。曾任职于中国移动飞信、机锋安卓市场,拥有丰富的数据库管理经验。目前致力于MySQL、Linux等开源技术的研究。 ...

贺春旸
2017/03/08
0
0
SQL自动审核-自助上线平台(未完待更新)

为了让DBA从日常繁琐的工作中解放出来,通过SQL自助平台,可以让开发自上线,开发提交SQL后就会自动返回优化建议,无需DBA的再次审核,从而提升上线效率,有利于建立数据库开发规范。 借鉴了...

hcymysql
2017/12/23
0
2
ORM规约变更经典案例---mysql军规

  先介绍一下《MySQL数据库开发的三十六条军规》,出自58赶集。 写在前面的话: 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏后,才记得曾经有人提醒过。 (一)核心军规 (1)不在数...

静儿1986
06/12
0
0
推荐书籍 -《移动App测试的22条军规》

在今天的博文中,博主希望给大家分享一本博主同事黄勇的最新利作:《移动App测试的22条军规》。黄勇是ThoughtWorks资深敏捷QA和咨询师。对于我来说,和黄勇在一起的工作的这个项目,是我至今...

zting科技
2017/01/11
0
0
信息安全管理的二十条军规

棱镜门事件至少告诉了我们一个事实,那就是NSA的安全技术和管理水平领先业界至少3-5年。 企业今天面临空前的安全威胁,犯罪集团、黑客散客、竞争对手、内部员工…如果没有周密的安全管理体系...

Cashcow
2014/02/17
0
0
WEB前端工程师-练成

一、HTML和CSS基础 1.1 开发工具 1.1.1 前端开发工具技巧介绍-DW篇 1.1.2 前端开发工具技巧介绍-Sublime篇 1.2 HTML和CSS基础课程 1.2.1 HTML+CSS基础课程 1.3 网页布局 1.3.1 如何用CSS进行...

霞女
2015/12/02
62
0
运维85条军规 

运维85条军规 1) 承载能力优先 ——随后再进行优化 —— 不遵守这条规则必定带来故障停机时间。不要在故障停机时间的压力下进行优化——要先集中精力提高承载能力。 2) 以Postgres为例,一定...

AndyXi
2016/11/22
14
0
OSC 第 90 期高手问答 —— 移动 APP 自动化测试

OSCHINA 本期高手问答( 9月8日- 9月14日) 我们请来了 @hy1984427 为大家解答关于 移动 APP 自动化测试 方面的问题。 黄勇,@hy1984427 ,现任 ThoughtWorks 中国区 QA Lead。2006 年天津大学...

叶秀兰
2015/09/08
3.8K
28
高手问答第 169 期 —— 聊聊 Web 测试中的那些囧事

OSCHINA 本期高手问答(2017 年 9 月 6 日 — 9 月 12 日)我们请来了黄勇老师@hy1984427 和大家一起探讨 Web 开发中测试的种种问题。 黄勇,ThoughtWorks QA Lead。先后任职于博彦科技、普华...

局长
2017/09/05
3.5K
51

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
20分钟前
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
41分钟前
0
0
HTTP协议通信原理

了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。 HTTP使用...

寰宇01
今天
0
0
【Java动态性】之反射机制

一、Java反射机制简介

谢余峰
今天
1
0
Centos 6.X 部署环境搭建

1.Linux学习笔记CentOS 6.5(一)--CentOS 6.5安装过程

IT追寻者
今天
0
0
博客即同步至腾讯云+社区声明

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=8vy9bsmadbko...

xiaoge2016
今天
1
0
大数据教程(3.1):Linux系统搭建网络YUM源服务器

博主在前面的2.5章节讲述了linux系统本地YUM服务器的搭建和httpd轻量级静态网站服务器的安装,本节博主将为大家分享内网环境中搭建自己的网络YUM服务器的全过程。如果大家对本地YUM服务器还不...

em_aaron
今天
1
0
蚂蚁技术专家:一篇文章带你学习分布式事务

小蚂蚁说: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务...

Java大蜗牛
今天
1
0
新的Steam应用将拓展服务项目

导读 未来几周,Steam将推出两个免费的应用程序Steam Link和Steam Video。这两个应用程序都旨在拓展Steam平台的业务和便利性。 即将开放的Steam Link应用程序最先提供了Android测试版,它将允...

问题终结者
今天
0
0
golang 第三方包的使用总结

golang 第三方包的安装的方法: 1. go get 安装 $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时...

科陆李明
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部