用尽洪荒之力整理的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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dw网页制作入学教程_简单的手机网页制作教程

很多小白会以为建站只能通过电脑,但实际上,用手机也能顺利建站,而且操作非常简单,不需要你懂技术知识哦!下面就跟大家说说手机网页制作教程:首先,你需要选择一个比较好用的手机网页制作app。尽量…

拓展欧几里得理论基础(含一定证明)

首先有gcd(a,b)gcd(b,a%b)这个复杂度最差也是log2的 因为大数对小数取余的时候 这个小数如果是比大数的一半大 那么取余完会比大数的一半大,如果小数比大数的一半小 那么取余完还是会比大数的一半大,所以最差也是log2的。 然后是axbyc有解的充要条件是c整…

Sqli-labs less 64

Less-64 此处的sql语句为 $sql"SELECT * FROM security.users WHERE id(($id)) LIMIT 0,1"; 示例payload: http://127.0.0.1/sqli-labs/Less-64/?id1))and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20…

linux 双显卡 黑屏 amd,Win10系统AMD双显卡笔记本开机出现黑屏怎么办?解决方法...

win10是一个全新的操作系统,所以我们在使用时很有可能会碰到一些没见过的新问题。比如,有用户在升级到Windows10后,发现AMD双显卡笔记本出现了开机黑屏的情况。具体表现为:Windows Logo加载之后,用户登陆之前会出现30s…

双目立体视觉建立深度图_关于双目立体视觉的三大基本算法及发展现状的总结...

作者:何文博双目立体视觉一直是机器视觉研究领域的发展热点和难点,“热”是因为双目立体视觉有着及其广阔的应用前景,且随着光学、计算机科学等学科的不断发展,双目立体技术将不断进步直到应用到人类生活的方方面面。“难”则是因…

layer弹出层

个人觉得风格不错的,所以收藏下来: layer.open({title: 提示,offset: 100px,skin: layui-layer-lan,content:这是一个open弹出框,time: 3000}); layer.open({type: 1 //Page层类型,area: [500px, 300px] //弹出层大小,title: 你好,layer。,sh…

[BZOJ 1834] [ZJOI2010]network 网络扩容

1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MBDescription 给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。求: 1、 在不扩容的情况下,1到N的最大流; 2、…

fw150us的linux驱动下载,迅捷FW150US1.0/2.0无线网卡驱动

迅捷FW150US1.0/2.0无线网卡驱动官方版是迅捷推出的一款超小型150M无线USB网卡,安装迅捷FW150US1.0/2.0无线网卡驱动官方版,即可正常连接电脑使用。迅捷FW150US1.0/2.0无线网卡驱动支持自动检测功能,能够自动调整速率,无线传输速率…

20160811

一:边框样式 1.边框线 border-style : none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset 例:div { width:300px; height:100px; border-style:solid; } border-top-style 设置上边框线 border-bott…

vip地址能ping不通_电脑高手必备ping和netstat命令

1、Ping的基础知识ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一…

git无法pull仓库refusing to merge unrelated histories

我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法pull 因为他们是两个不同的项目,要把两个不同的项目合并…

ld: -pie can only be used when targeting iOS 4.2 or later clang: error: linker command failed with e

把Deployment Target 改为4.3或以后 图片:屏幕快照 2014-10-13 16.56.51.png 版权声明:本文为博主原创文章,未经博主允许不得转载。 转载于:https://www.cnblogs.com/thelatewind/p/4700937.html

linux   图片

转载于:https://blog.51cto.com/wzsts/1837102

c语言中通过分隔符取字符串,C语言切割多层字符串(strtok_r strtok使用方法)

1. strtok介绍众所周知,strtok可以根据用户所提供的分割符(同时分隔符也可以为复数比如“,。”)将一段字符串分割直到遇到"\0".比如,分隔符“,” 字符串“Fred,John,Ann”通过strtok 就可以把3个…

array python 交集_Python基础(二)——列表和元组

Python中最基本的数据结构是序列,序列中的每一个元素都有编号,即索引(从左到右第一个索引为0,从右到左第一个索引为-1)。python提供的序列类型在所有程序设计语言中是最丰富、最灵活,也是功能最强大的。pyt…

定义jQuery插件

JQuery&JS扩展方法的实现: JQuery: http://www.cnblogs.com/xcj26/p/3345556.html JS: http://www.cnblogs.com/kissdodog/p/3386480.html转载于:https://www.cnblogs.com/yaoqtan/p/4634943.html

c语言注释部分两侧的分界符号分别是,c语言中界定注释的符号分别是什么?

在c中有两种类型的注释:单行注释和成对注释。单行注释以双斜线(//)开头。同一行中斜线右侧的所有内容都是注释,会被编译器略过。另一个分隔符是注释符号对(/**/),它继承自c语言。这种注释以/*开始,以*/结尾。编译器把/*和*/之间的…

浅谈PHP+Access数据库的连接 注意要点

今天公司需要用php连接access 数据库,结果整了半天Access数据库 就是连接不上,查找 很多资料,以下是我的经验, -.- 希望能给需要连接access 数据的人带来帮助。。-.- 需要注意: 安装access 数据库的时候 需要安装与本…

lua 字符串分割_Lua函数式编程(中)

书接前文,我们继续慢慢的了解 所谓的函数式编程思想。考查下面的例子判断给定的数是否是偶数 在Lua里面这似乎是个幼儿园问题local isEven function(v) return v % 2 0 end但我们如何用函数式的思维去解决问题?是的,假设我们有了以下函数R.…

mybatis 乐观锁和逻辑删除

本篇介绍easymybatis如配置乐观锁和逻辑删除。 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用Version注解来实现。即:数据库增加一个int或long类型字段version,然后实体类version字段上加上Version注解即可。实现原理是根据mysql的行…