为部门整理的mysql_db使用军规

mysql_db使用军规:

1、禁止开发測试人员在IDC环境手工删除和改动数据

2、全部需求通过DB工具系统提交

3、禁止在IDC环境DB进行測试

4、IDC环境提交的sql语句一定要经过非正式环境验证。且经过"explain sql;"检验过运行计划有走索引

5、IDC环境库表创建统一用小写,库表用英文简称,力求精简

6、禁止web机器直连DB

7、每条记录要保存数据的创建和改动时间,表通常要有主键。使用innodb引擎

8、IDC环境db仅仅授权增查改,删除权限DBA评估

9、预估和控制单表的数据量在百万以内,数据量过大需清理或分表

10、IDC环境禁止使用mysql视图,存储过程。触发器,自己定义函数

 

一、表的一句话优化

1.   int型不超过1000w。含char则不超过500w

数字和字符装不下的情况,考虑多字段。

2.   按时间分表,按主键取模/hash分表,按量分表

红包是按量来的。

3.   限制单库表的数量在万级以内

4.   拒绝text和blob类型

实在避免不了要用text和blob类型,拆表吧。或者弄成本地保存。多机器分片存储。

5.   分区的算法能够按时间

比方天、月。便于针对性的查询,命中率100%

二、字段的一句话优化

1   长度能够冗余,可适量10%左右

tinyint(1Byte)smallint(2Byte)mediumint(3Byte)int(4Byte)bigint(8Byte)认清长度,选择好类型。

2   你认识null吗?

避免使用NULL字段,由于NULL字段非常难查询优化。NULL字段的索引须要额外空间;NULL字段的复合索引无效。

错误的样例:`Fpacket_name` char(32) default null。

正确的样例:`Fpacket_name` varchar(60) NOT NULL DEFAULT ‘‘。

`Fface_value` int(10) unsigned NOT NULLDEFAULT ‘0‘。"

3   业务上有关联的字段。要定义同样类型

同样的类型做语句操作有助于提高操作效率。降低转换成本。

4   选择类型请用数字、枚举

数字表示意思的,来替代字符串。

正确的样例:性别,0男,1女;时间用时间戳的数字形式。IP用数字型等等。

三、语句的一句话优化

1     利用explain神器来优化语句利弊

Type结果集:显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和all。

2     Truncate比delete要快

Delete 计数器不清零,
按行删, 慢。

Truncate相当于删掉重建,
最快。

批量删除最好导出实用数据,然后删掉旧表,
新表重命名。

3     用join取代子查询

Join原理,nested loop。Left Join
数据量小的在前面,Straight_JOIN。

4     自带函数运算

不要让MYSQL用自己函数,他已经非常累。尽量在程序内实现,比方now(),放到程序里取到了再传入给mysql处理。

更不要在mysql去处理大逻辑运算。

5     要知道一条语句是依赖一个CPU内核的

一条语句一个内核。大语句能够拆开多语句,多核机共用,还能够降低mysql锁时间。

6     不要select *

除非你查询的全部字段都要用到。

。。

否则你占用这么多内存。宽带,CPU时间,IO干鸟蛋。

7     假设能用in,就不要用or

or的时间复杂度是n,in的时间复杂度是log(n)。

错误的样例:select Fpacket_name from t_account_packet where Fpacket_id =68698080 or Fpacket_id = 68711068;

正确的样例:select Fpacket_name from t_account_packet where Fpacket_id in(68698080,68711068);"

8     假设能用union。就不要用or

和上边同理

9     合理使用limit

拍拍数据一般都是自增的,所以定位的话一般都要倒序来看近期时间的。但limit又是最慢的一个倒序合理结合limit的话,能体现出更高的效率。

近期的2个批次,正确的样例:select Fpacket_id from t_account_packet order by Fpacket_id desclimit 2;

错误的思路:select count(*) from t_account_packet ; =>879446;

selectFpacket_id from t_account_packet limit 879444,879446;

近期的第2个批次,正确的样例:selectFpacket_id from t_account_packet order by Fpacket_id desc limit 1,1。"

错误的思路:select count(*) from t_account_packet ; =>879446;

selectFpacket_id from t_account_packet limit 879444,879445;

10 
假设能用load data,就不要用insert

做幸运占卜师活动的时候,默认是要加载非常多血型和性格相关数据的。当时用的是source+逐行insert方法导数据,或者考虑load data。它的原理是在运行load之前,会关掉索引,当load所有运行完毕后,再又一次创建索引。

而insert的原理是:每插入一条则更新一次数据库,更新一次索引。所以要慢非常多倍。详细多少倍,依赖待处理的数量级。

四、索引的一句话优化

1.   尽量选择区分度高的索引进行检索

错误的样例:name。

正确的样例:id。

2.   不易过多

表数据与索引的容量比保持在1:1      
,至少一条语句中存在一个索引。

3.   索引是从左向右原则

4.   利用explain神器来运行和分析索引的覆盖

5.   不要用索引字段做计算

你见过哪个应急通道上,有自驾车站位的?

6.   要认识他们MyISAM(重搜索), Innodb(默认。事务性、重业务)

innodb主键推荐使用自增列

时间: 2024-08-05 10:56:39

为部门整理的mysql_db使用军规的相关文章

B/S系统常见缺陷整理和解决方案

最近部门整理了今年所有项目测试团队提出的BUG,筛选了几十个作为常规通用的缺陷,我根据这些缺陷内容,去掉和业务相关的知识,整理出了一份缺陷描述和解决方案. 其实WEB系统中常规的缺陷分类后也就那么多,但汇总过程,有同事建议分类写得更通用点,但我想了下,写了后大家可能更看不懂,本来常犯的错误也就这么多,分类比如按照安全问题,性能问题,并发问题,可能描述更专业,但开发.测试团队的人看到可能太官方和自己无关,自己也不会引起重视了.所以我的分类和问题描述可能更口水话一点,但应该能让每个人都很快看得懂.

Citrix 3D虚拟化解决方案之小结

最近有机会通过微信群(感谢桌面云 | 云潮涌动 微信群)分享了一下桌面虚拟化中的3D虚拟化这个子类的一些经验.正好也把过去近3年参与3D桌面虚拟化的一些项目经验做了一个梳理,特整理如下. 相较于普通的桌面虚拟化,3D桌面虚拟化是一个普通桌面虚拟化中研发桌面的衍生场景.过去多年,3D用户的桌面虚拟化需求一直都存在,但受限于技术很难完成交付.3D用户主要分布在包括工程制造.能源.科研.医疗等几个行业及相关的研究机构,在国外还有金融.政府这些行业.而在国内,近两年受到制造2025的大环境的影响,特别是

【运筹学】企业最重要的部分-预测和决策

运筹学(operations Research)是一门研究如何有效的组织和管理人机系统的科学.在管理领域,对管理决策工作进行决策的计量方法.运筹帷幄之中,决胜千里之外,企业领导的主要职责就是运用运筹学的理论知识,结合自己企业所处的各种环境,然后制定出决策,选出最优方案,帮助企业实现利益最大化. 凡事预则立,不预则废.预测是对未来不确定的事件进行估计和判断.预测是做出决策的基础,它为企业制定决策提供了数据和资料.企业应该不断地根据外界环境的变化,对发展趋势,国家的政策改变带来的影响进行预测,预测是

测试相关知识分享(百度和其他途径查找到的)

A: 1.一套完整的测试应该由哪些阶段组成? 参考答案:测试计划.测试设计与开发.测试实施.测试评审与测试结论 2.单元测试的主要内容? 参考答案: 模块接口测试.局部数据结构测试.路径测试.错误处理测试.边界测试 3.集成测试也叫组装测试或者联合测试,请简述集成测试的主要内容? 参考答案: (1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失; (2)一个模块的功能是否会对另一个模块的功能产生不利的影响; (3)各个子功能组合起来,能否达到预期要求的父功能; (4)全局数据结构是否有

软件测试面试题汇总

软件测试面试题汇总 测试技术面试题    4 1.什么是兼容性测试?兼容性测试侧重哪些方面?    4 2.我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?   5 3.测试的策略有哪些?    5 4.正交表测试用例设计方法的特点是什么?   5 5.描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程?    5 6.描述测试用例设计的完整过程?   5 8.单元测试的策略有哪些?    5 什么是并发?在lordrunne

测试资源不够怎么办,我的第一次内测分享

一般几轮系统测试完后,会进行验收或用户测试,因为是自家产品,我这里就简称内测活动,主要对象是公司内部人员,大家可以借鉴讨论. 内测活动的由来 产品后端之前是PHP做的,由于发展后端需要换成Java,替换原有功能的同时,新增了很多功能,基本前后端重做,确认产品上线日期后,各方时间都很紧,按照最初的设计排期,测试组会有两周的时间进行测试(第一周完成一轮系统测试,第二周就进行回归,并会更早的介入测试),中途由于某些原因,提测时间后延了一周,加上产品上线时间不能改变,于是测试时间缩短一半(压力很大,也许

用尽洪荒之力整理的Mysql数据库32条军规

今天上午吐血整理了Oracle SQL性能优化的40条军规,其中很多规则也是适用于Mysql的,结果今晚发现这一篇文章——用尽洪荒之力整理的Mysql数据库32条军规,和我的竟有异曲同工之妙,当然不同的是这是由具有12年Java开发经验的老鸟写的,其见解和认识肯定比我的更加深刻,感谢前辈,现全文转载如下: --------------------------------------------------------------split line------------------------

《吐血整理》Redis 性能优化的 13 条军规!史上最全

Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行. 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度: 使用?lazy free(延迟删除)特性: 设置键值的过期时间: 禁用长耗时的查询命

一个测试老鸟的工作总结(3)——质量部门成立之现形记全录(上)

这两年在测试管理上的工作经验提升对我来说还是有很大裨益的,想着以故事的方式把自己的经历杜撰一把,当中的心得和感受可能从描述和理解上来说更地气. 在原来公司做了半年不到的测试主管,一次领导找我谈话,问我对公司现在的测试现状和产品质量的看法:当时因为测试团队刚组建,所以就提了一此工作执行中的困难和细节问题,同时也指出现在主要的问题是各职能部门对于项目权责划分不明确,看似项目中可管理的人员有很多,确没有负责的主体人员:加上因为研发流程的缺失,使工作中这种都能过问,却没人主管的情况更显突出:并对规范和执