首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL性能设计规范

相关文章: MySQL性能设计规范:http://www.jianshu.com/p/f797bbe11d76 MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45...一、选择优化数据类型 MySQL支持数据类型非常多, 选择正确数据类型对于获得高性能至关重要。...有符号和无符号类型使用相同存储空间,并具有相同性能 , 因此可以根据实际情况选择合适类型。 你选择决定 MySQL 是怎么在内存和磁盘中保存数据。...单独也能使用更有效索引策略。 混用范式化和反范式化 在实际应用中经常需要混用,可能使用部分范式化 schema 、 缓存,以及其他技巧。 适当增加冗余字段,如性能优先,但会增加复杂度。...参考资料: 高性能mysql第三版

78620

MySQL 5.7 分区性能下降案例分析

告知MySQL5.7.18使用者分区使用中存在陷阱,避免在该版本上继续踩坑。...同时通过对源码讲解,升级MySQL5.7.18时分区性能下降根本原因,向MySQL源码爱好者展示分区实现中锁运用。 问题描述 MySQL 5.7版本中,性能相关改进非常多。...我们在测试环境,把数据库升级到5.7.18版本,验证MySQL 5.7.18版本是否符合我们预期。观察运行了一段时间,有开发反馈,数据库性能比之前5.6.21版本有下降。...主要表现特征是遇到比较多锁超时情况。开发另外反馈,性能下降相关都是分区。更新走都是主键。这个反馈引起了我们重视。我们做了如下尝试: 数据库版本为5.7.18, 保留分区性能会下降。...数据库版本为5.7.18,把调整为非分区性能正常。 把数据库版本回退到5.6.21版本,保留分区性能也是正常 通过上述测试,我们大致判定,这个性能下降和MySQL 5.7版本升级有关。

61300
您找到你想要的搜索结果了吗?
是的
没有找到

MYSQL性能优化分享(分库分)

MYSQL性能优化之分库分与不停机修改mysql结构,需要朋友可以参考下 1、分库分 很明显,一个主表(也就是很重要,例如用户)无限制增长势必严重影响性能,分 库与分是一个很不错解决途径...,也就是性能优化途径,现在案例是我们有一个1000多万条记录用户members,查询起来非常之慢,同事做法 是将其散列到100个中,分别从members0到members99,然后根据mid分发记录到这些中...> 2、不停机修改mysql结构 同样还是members,前期设计结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理: 先创建一个临时: /*创建临时...,members_tmp TO members; 就是这样,基本可以做到无损失,无需停机更新结构,但实际上RENAME期间是被锁死,所以选择在线少时候操作是一个技巧。...经过这个操作,使得原先8G多,一下子变成了2G多 另外还讲到了mysql中float字段类型时候出现诡异现象,就是在pma中看到数字根本不能作为条件来查询.感谢zj同学新鲜分享。

1.1K50

阿里三面:MySQL性能伤害有多大?

1 回性能消耗 无论单列索引 or 联合索引,一个索引就对应一个独立B+索引树,索引树节点仅包含: 索引里字段值 主键值 即使根据索引树按条件找到所需数据,也仅是索引里几个字段值和主键值,万一你搞个...所以类似 select * from table order by xx1,xx2,xx3 得从联合索引索引树里按序取出所有数据,接着对每条数据都走一个主键聚簇索引查找,性能不高。...有时MySQL执行引擎可能认为,你要是类似 select * from table order by xx1,xx2,xx3 相当于得把联合索引和聚簇索引,两个索引所有数据都扫描一遍,那还不如不走联合索引...所以当你使用联合索引时,注意是否可能会导致大量回到聚簇索引,若回聚簇索引次数太多,可能就直接给你做成全扫描而不走联合索引了。...即使无可避免地要回,你也尽可能用limit、 where限定一下回次数,就从联合索引里筛选少数数据,再回,这样性能好一点。

1.4K20

mysql由于临时导致IO过高性能优化过程分享

,SSD速度要比SATA明显要快,优化后磁盘不再是瓶颈,SSD和SATA性能没有差别。...【理论分析】 MySQL在执行SQL查询时可能会用到临时,一般情况下,用到临时就意味着性能较低。...临时存储 MySQL临时分为“内存临时”和“磁盘临时”,其中内存临时使用MySQLMEMORY存储引擎,磁盘临时使用MySQLMyISAM存储引擎; 一般情况下,MySQL会先创建内存临时...,但内存临时超过配置指定值后,MySQL会将内存临时导出到磁盘临时; Linux平台上缺省是/tmp目录,/tmp目录小系统要注意啦。...设计原则 使用临时一般都意味着性能比较低,特别是使用磁盘临时性能更慢,因此我们在实际应用中应该尽量避免临时使用。

3K40

MySQL分库分中间件-RadonDB性能测试

,所以没有按官方要求部署后面的MySQL Plus(xenon),如果对于后面MySQL Plus部署有兴趣,可以参考 利用RadonDB实现MySQL分库分 中Xenon部署。...,每张100万数据集,争取数据全部在MySQLBuffer Pool缓存命中请求。...基于主键等值区间全量查询 从基于主键等值+区间类操作来看Radon性能表现有点比较差, 在16C16G内存机器上可以跑到将近4万QPS,近2千多一点TPS,每个TPS中包含9条SQL操作,随着分数量增多后性能更差...基于64个子表全量请求操作: ? ? ? 从资源使用上看, 随着分数量增加后,在请求不变情况下后端MySQLCPU基本达到100%,后端MySQL已经达到性能瓶颈。...,不要拆分太多分,为了应对更多问题,也可以考虑对后端MySQL引入更强劲CPU,从而获得性能提升。

1.2K10

MySql约束

中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期。约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...站在正常业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库时候,一定要在中进行限制,满足上面条件数据就不能插入到中。...一个主键可以被添加到一列,或者多列上 主键;主键所在列通常是整数类型 创建时候直接在字段上指定主键 mysql> create table if not exists test_key (...对于自增长:默认是从1开始插入,如果默认插入了一个值作为起始值,则从这个起始值加1开始 所以我们在创建时候可以给自增长设置一个起始值: mysql> create table t22( -...建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

17630

MySQL之间关系

之间关系 1 foreign key 2 则1多条记录对应2一条记录,即多对一 利用foreign key原理我们可以制作两张多对多,一对一关系 多对多: 1多条记录可以对应...2一条记录 2多条记录也可以对应1一条记录 一对一: 1一条记录唯一对应2一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实意义,就很好理解了...1、先确定关系 2、找到多一方,把关联字段写在多一方 一对多  多对一或者一对多(左边多条记录对应右边唯一一条记录)  需要注意: 1.先建被关联,保证被关联字段必须唯一。...图片 创建 书要关联出版社 被关联 create table press(id int primary key auto_increment, name char(20)); 关联 create...add primary  key(id,avg) 多对多:一个作者可以写多本书,一本书也可以有多个作者,双向一对多,即多对 关联方式:foreign key+一张新 示例: 图片 图片 创建 =

3.5K10

MySQL约束

约束 约束:中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期。约束本质是通过技术手段,倒逼用户,插入正确数据。...反过来,在 mysql 角度,凡是插入进来数据,都是符合数据约束!约束最终目的就是保证数据完整性和可预期性。因此我们需要更多约束条件!...值由原来 1 变成 00001,这就是 zerofill 属性作用,如果宽度小于设定宽度(这里设置是 5),自动填充 0;要注意是,这只是最后显示结果,在 MySQL 中实际存储还是1...再插入 stu : 但是此时这两张是两张独立,它们只有对应关联关系,并没有任何约束关系。...建立外键本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql 不允许你插入。

10910

MYSQL约束

'学号', name varchar(5) ); 创建好之后,我们可以追加主键 2.删除主键 alter table 名 drop primary key; 案例: 3.复合主键 在创建时候...索引: 在关系数据库中,索引是一种单独、物理对数据库中一列或多列值进行排序一种存储结 构,它是某个中一列或若干列值集合和相应指向中物理标识这些值数据页逻辑指针清单。...索引作用相当于图书目录,可以根据目录中页码快速找到所需内容。 索引提供指向存储在指定列中数据值指针,然后根据您指定排序顺序对这些指针排序。...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 七、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...;插入学生班级号不能在班级中没有。

22340

MySQL操作

#前言:我们说过,库相当于一个文件夹,表相当于文件夹里一个个文件,表里面的一条记录相当于一行内容,一条记录有对应标题,称为字段 #直观 ?...#id,name,sex,age为字段,其余一行内容称为一条记录 1.建 #创建表语法格式 Create table ( , ….....:   create table 表示创建固定关键字,student为名,有四个字段,分别表示   id:学号列, int:数字类型, 4:长度为4, not null:不为空值...字节 极大文本数据 #创建时候指定存储引擎 mysql> create table test ( -> id int(4) not null auto_increment,...#语法格式:drop table #例子:删除db库里面的student mysql> use db; Database changed mysql> show tables; #查看库中

4.7K40

MySQL约束

所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器编译失败实际上也算是一种约束。 中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期。...约束本质: 通过技术手段倒逼程序员插入正确数据。反过来站在mysql视角,凡是插入进来数据,都是符合数据约束。 约束最终目标: 保证数据完整性和可预期性。 为什么数据库这么严格?...二.非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应计算操作中。...如果将学生和班级结合成一个,那么在插入数据时,就需要插入大量字段造成没必要冗余。若将其分成两个,那么通过一一对应映射,来减少没必要数据。 为什么会造成没必要冗余?...在两个前提下,若要新增一名学生信息,只需要插入三个字段;若合并成一个,那么就需要插入3+2-1=4个字段,并且我们知道组合起来情况也会更多,两个合并结果就是数据位置上相乘,比如: 两个

18550

分区“拖出”性能Error

思维敏捷,擅长于数据库开发、解决棘手数据库故障和性能问题。...服务于公司华南区多个客户,曾参与过国内多家股份制银行、城市商业银行核心业务系统、数据仓库部署建设和生产运维工作,在数据库故障诊断、运维监控、性能优化方面积累了丰富经验。...为什么系统开启了每天自动收集统计信息任务,该却没有收集到统计信息呢?...检查表结构,发现这是一个分区,每天一个分区(例如p20160428),与开发人员确认,当天业务数据是记录在kns_tran_fund中,这些数据每天晚上由业务程序插入到历史h_kns_tran_fund...--此时可以看到dba_tab_modifications中纪录了和分区0502变化情况。

83070

mysql分区_MySQL分区分

以至于查询速度变慢,而且由于锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 mysql中有一种机制是锁定和行锁定,是为了保证数据完整性。...2、MySQL是将一个大按照一定规则分解成多张具有独立存储空间实体表,每个都对应三个文件,MYD数据文件,.MYI索引文件,.frm结构文件。...提升了数据库访问性能。分目的就在于此,减小数据库负担,缩短查询时间。...Mysql分为垂直切分和水平切分,具体区别如下: 垂直切分是指数据表列拆分,把一张列比较多拆分为多张 通常我们按以下原则进行垂直拆分: 把不常用字段单独放在一张; 把text,blob(...#创建两个分结构必须和上面完整结构一致 mysql> create table tb_member1 like member; mysql> create table tb_member2 like

9.8K20

MySQL 临时与内存区别

MySQL 中,Temporary Table(临时)和 Memory Table(内存)是两种不同类型,它们有一些重要区别和用途。...可以使用 CREATE TEMPORARY TABLE 语句创建临时。 临时可以存储在磁盘上,也可以存储在内存中,具体取决于 MySQL 配置和存储引擎。...内存适用于需要快速读写操作场景,但需要注意是,内存数据会在 MySQL 服务重启时丢失,因为数据存储在内存中。...3.区别 主要区别在于存储和生命周期: 存储: 临时存储位置可以是磁盘或内存,而内存数据存储在内存中。...生命周期: 临时生命周期限于会话或连接,会话结束时自动删除;而内存数据在 MySQL 服务重启时会丢失。 4.小结 您需要根据业务需求来选择使用临时还是内存

24630

MySQL - 高效设计MySQL

,查询数据需要多表关联时,会导致查询性能低下 反范式化模型: 冗余将带来很好读取性能,因为不需要 join 很多表 虽然需要维护冗余数据,但是对磁盘空间消耗是可以接受 ---- MySQL...MySQL 虽然具有很多特性并提供了很多功能,但是有些特性会严重影响它性能,比如,在数据库里进行计算,写大事务、大 SQL、存储大字段等。...想要发挥 MySQL 最佳性能,需要遵循 3 个基本使用原则 首先是需要让 MySQL 回归存储基本职能:MySQL 数据库只用于数据存储,不进行数据复杂计算,不承载业务逻辑,确保存储和计算分离...一旦事务回滚,会导致资源占用时间过长 大 SQL,复杂 SQL 意味着过多关联,MySQL 数据库处理关联超过 3 张以上 SQL 时,占用资源多,性能低下 大批量,意味着多条 SQL...这些字段类型,在 MySQL 数据库检索性能不高,很难使用索引进行优化。如果必须使用这些功能,一般采取特殊结构设计,或者与程序结合使用其他字段类型替代。

3.3K12

MySQL之间关系详解

大家好,又见面了,我是你们朋友全栈君。 外键 说到之间关系就不得不说到一个关键词:外键 MySQ中外键是什么,和之间有什么关联?...,子表employee中对应记录跟着删 mysql> delete from department where id=3; mysql> select * from employee; +----+-...,子表employee中对应记录跟着改 mysql> update department set id=22222 where id=2; mysql> select * from employee;...分析步骤: #1、先站在左角度去找 是否左多条记录可以对应右一条记录,如果是,则证明左一个字段foreign key 右一个字段(通常是id) #2、再站在右角度去找 是否右多条记录可以对应左一条记录...这种情况很简单,就是在左foreign key右基础上,将左外键字段设置成unique即可 找出之间关系 通过以上方法可以找到之间 关系,既然找到了这种关系或者叫关联

2K30

Mysql性能优化

1、参考书籍:MYSQL 5.5从零开始学   Mysql性能优化就算通过合理安排资源,调整系统参数使MYSQL运行更快,更节省资源。...MYSQL性能优化包括查询速度优化,更新速度优化,mysql服务器优化等等。此处,介绍以下几个优化。包含,性能优化介绍,查询优化,数据库结构优化,mysql服务器优化。   ...Mysql优化,一方面是找出系统瓶颈,提高mysql数据库整体性能,另外一个方面需要合理结构设计和参数调整,以提高用户操作响应速度。同时还要尽可能节省系统资源,以便系统可以提供更大负荷服务。...mysql数据库优化是多方面的,原则是减少系统瓶颈,减少资源占用,增加系统反应速度。 2、Mysql中,可以使用SHOW STATUS语句查询一些Mysql数据库性能参数。...5、索引对查询速度影响。 1 mysql中提高性能最有效方式就是对数据设计合理索引。索引提供了高效访问数据方法,并且加快了查询速度。因此,索引对查询速度有着至关重要影响。

96131

MySQL 性能优化

避免使用 select *,列出需要查询字段。垂直分割分。选择正确存储引擎。    ...缓存原则是对那些查询需求远大于增删改需求数据         除此之外,尽量不要在where子句中使用函数,会使索引失效         如果已经确定查询结果只有一条数据(当中数据该字段是唯一)...,在查询SQL末尾增加 limit 1         模糊查询尽量使用右模糊,左模糊会使索引失效         如果非要使用连接,最好要保证连接两个字段都是创建了索引         避免使用...因为‘’不占用空间,null会占用空间         在SQL语句中不要有运算,否则MySQL会放弃索引。        ...对于百万级以上数据,如果要做表连接查询,一定要对表先分页,然后对分页结果再做表连接。也可以不用连接         nginx(负载均衡)  读写分离(MyCat) 主从复制(修改配置文件)

60900

MySQL性能优化】MySQL分库分与水平分割取模案例(三)

欢迎访问原文: 【MySQL性能优化】MySQL分库分与水平分割取模案例(三) 分分库 当项目比较大时候,基本上都会进行分分库 后面就讲讲什么时候需要分库,什么时候需要分 什么时候需要分库...而像SaaS应用,通过按用户维度来划分数据比较合适,因为用户与用户之间隔离,一般不存在处理多个用户数据情况,简单按user_id范围来水平切分 为什么需要分,就比如,一个,几十年数据全部在那个中...这个时候就需要做一个分、分规则,一般按照业务需求来定。没有统一分法。...一般MySQL1000W左右数据是没有问题(前提是应用系统和数据库等层面设计和优化比较好) 当然,如果需要分,肯定是需要提前计划半年或者一年计划。...rds是二次开发数据库,所以在性能上来说,比其他关系型数据库是快很多。可以自己去了解下) 本文章由[谙忆]编写, 所有权利保留。 欢迎转载,分享是进步源泉。

40910
领券