mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)
今天上午吐血整理了
--------------------------------------------------------------split line-----------------------------------------------------
写在前面的话:
总是在灾难发生后,才想起容灾的重要性;
总是在吃过亏后,才记得曾经有人提醒过。
核心军规
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 nullgoodcase:'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′union
select 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 slowlog;
show processlist;
show query_response_time(percona);
mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)相关推荐
- mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规
写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. 核心军规 1.不在数据库做运算 cpu计算务必移至业务层 2.控制单表数据量 int型不超过1000w, ...
- 用尽洪荒之力整理的Mysql数据库32条军规
写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. 核心军规 1.不在数据库做运算 cpu计算务必移至业务层 2.控制单表数据量 int型不超过1000w, ...
- python flask源码解析_用尽洪荒之力学习Flask源码
[TOC] 一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见.最近正好时间充裕,决定试试做一下,并记录一下学习心得. 首先说明一下,本文研究的Flask版本是0.12. 首先做个小示例,在p ...
- c 获取mysql列数据_转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,"C API函数描述". 函数 ...
- mysql级联删除_每天学一点学点MySQL数据库之第二节
三.快速安装运行MySQL数据库 MySQL以前一直是开源免费的,被Oracle收购后有些变化:以前的版本都是免费的,社区版按GPL协议开源免费,商业版提供更加丰富的功能,但收费. 社区版的下载地址: ...
- mysql 命令 例子_一个例子运用了所用mysql数据库操作命令
Mysql常用命令解析 修改密码的几种方法 方法一:登陆进mysql set password for root@localhost = password('123'); /这种方法也适用于给某个用户 ...
- docker容器mysql头文件_在Docker容器中使用MySQL数据库
开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...
- lnp和mysql分开安装_毕业设计之LNP+DISCUZ +分离的数据库操作
环境介绍: CentOS6.9最小化安装 https://nginx.org/download/nginx-1.16.1.tar.gz https://www.php.net/distribution ...
- mysql降低数据库版本_三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQ...
三步10分钟搞定数据库版本的降迁 (将SQL2008R2降为SQL2005版本) 前思后想仍觉得实战数据库版本的降迁一文中的方式不仅老土而且低效,故有了下文三步搞定数据库从MSSQL2008R2 高版 ...
最新文章
- MFC CListCtrl控件基本使用图解
- 【中级软考】什么是McCabe测量法(McCabe复杂性度量、环路度量。计算有向弧数、结点数、强连通分量个数)
- Java代码总结【1】_查询手机号码归属地
- android 栏目编辑,android – 编辑文本导致内存泄漏
- Windows Server 2012 2R服务器版本域控制器的安装及域环境的搭建(内有镜像下载)...
- 在 Windows 7 下手动删除驱动程序
- 扒美女衣服——妄撮游戏实现原理
- java 微服务架构图_图解微服务架构演进
- 中了勒索病毒如何自救?20220105
- easyExcel 导出 excel 自定义表头
- Effective GO
- 微信小程序开发 网络异常监听
- java offset什么意思_java – “offset或count可能接近-1 1”这是什么意思
- 什么是溢出?补码加法运算如何判断是否溢出?
- html调用摄像头直播,html5调用摄像头功能的实现代码
- Create WAP Push SMS Messages
- 华科计算机保研复试题目,2010华科保研复试经验谈
- Verilog实现一个8位带进位全加器
- 有计算机考试励志的文案,中考励志文案(精选50句)
- 超级机器人大战阿尔法php,超级机器人大战α流程攻略 机战Alpha外传分支多线路攻略(9)...
热门文章
- PHP json_encode中文乱码解决方法
- Android工具栏中心标题和自定义字体
- Java中“最终类”的意义是什么?
- 在Bash中重定向stderr和stdout
- 华为鸿蒙os系统测试,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
- windows oracle .msb not found,oracle安装, Message file sp1lang.msb not found
- win11虚拟内存怎么修改 Windows11修改虚拟内存的步骤方法
- 前端 圆形进度图_Highcharts 圆形进度条式测量图
- mysql事物介绍_MySQL--事务介绍
- 有关二级菜单缓慢效果出现(transition)