MySQL优化-读写分离

程序员日记      2019-08-19
说明实现了主从复制接下来就可以读写分离了,MASTER主机负责写操作,SLAVE主机负责读操作常见的读写分离方式1.程序中实现读写分离(写操作连接MASTER数据库,读操作连接SLAVE数据库)2.MySQL中间件实现,比如说MySQL-Proxy中间件,但是需要写读写分离的LUA脚本,相对来说配置比较麻烦,下次再讲了。程序中实现读写分离笔者的主攻语言是PHP,作为一个PHPER,这里简单给大家介绍常用的开发框架的数据库读写分离配置ThinkPHP5.1,修改config.php文件。//服务器...
标签:
424 人看过

MySQL优化-主从复制(MASTER-SLAVE)

程序员日记      2019-08-19
定义MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。应用场景在开发工作中,有时候会遇见某个sql语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。环境准备说明本...
标签:
427 人看过

MySQL优化-分库分表

程序员日记      2019-08-19
数据库架构演变单机数据库->(读操作日益增加,用户请求量大)读写分离,主从复制(负载均衡)->(写操作越来越多,单Master无法满足)分库分表分区问题1.用户请求量太大因为单服务器TPS,内存,IO都是有限的。解决方法:分散请求到多个服务器上;也就是堆机器解决,常见解决方案就是读写分离,多个服务器提供给数据库读操作访问2.单表太大CRUD都成问题;索引膨胀,查询超时解决方法:分区分表。3.单库太大单个数据库处理能力有限;单库所在服务器上磁盘空间不足;单库上操作的IO瓶颈解决方法:分...
标签:
443 人看过

MySQL优化-MySQL数据表分区

程序员日记      2019-08-18
定义分区是根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影响应用的业务逻辑。MYSQL的分区的两种形式水平分区水平分区(HorizontalPartitioning)这种形式分区是对表的行进行分区,所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。举个例子,十年的订...
标签:
449 人看过

MySQL优化-查询语句优化

程序员日记      2019-08-18
1.尽量少使用!=,<>,!<、!>,NOTLIKE等逆向操作符应尽量避免在WHERE子句中使用!=,<>,!<、!>,NOTLIKE等逆向操作符,否则将引擎放弃使用索引而进行全表扫描。 2.尽量少对字段进行null值判断否则将导致引擎放弃使用索引而进行全表扫描如selectidfromtwherenameisnull 可以在name上设置默认值'',确保表中name列没有null值,然后这样查询: selectidf...
标签:
430 人看过

MySQL优化-索引设计优化

程序员日记      2019-08-18
索引设计优化1.单表索引建议控制在5个以内2.单索引字段数不允许超过5个字段超过5个时,实际已经起不到有效过滤数据的作用了3.禁止在更新十分频繁、区分度不高的字段上建立索引比如状态值,性别值等。更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似4.建立组合索引,必须把区分度高的字段放在前面,能够更加有效的过滤数据5.WHERE语句常用字段建立索引6.ORDERBY语句常用字段建立索引当我们使用O...
标签:
417 人看过

MySQL优化-字段设计优化

程序员日记      2019-08-18
字段设计优化1.字段必须设计为非空(NOTNULL)字段,理由如下1).NULL的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化2).NULL这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多3).NULL值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识4).对NULL的处理时候,只能采用ISNULL或ISNOTNULL,而不能采用=、in、<、<>、...
标签:
440 人看过

MySQL优化-数据表设计优化

程序员日记      2019-08-18
数据表优化1.使用InnoDB存储引擎早年有关于存储引擎具体是选择InnoDB还是MyISAM的选择,但是随着不断的完善,现在不存在这个问题了,从各个方面赶超MyISAM,也是MySQL默认使用的存储引擎。2.必须使用UTF8字符集UTF8MB4万国字符集,无需转码,无乱码风险,节省空间3.数据表、数据字段必须加入中文注释 不加注释的话2-3年以后你再回头看看你的表看认识不认识。4.尽可能少甚至不使用存储过程、视图、触发器、Event高并发大数据的互联网业务,架构设计思路是“解放数据库...
标签:
421 人看过

MySQL优化-数据库设计三大范式及逆范式的思考

程序员日记      2019-08-17
第一范式(1NF)字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分;第二范式(2NF)要求实体的属性完全依赖于主键。所谓完全依赖是指不能存在仅依赖主键一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖主键。第三范式(3NF)满足第三范式(3NF)必须先满足第二范式(2NF)。简而言...
标签:
486 人看过

MySQL优化-配置文件优化及硬件优化

程序员日记      2019-08-17
服务器硬件对MySQL性能的影响磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案:  1.使用RA...
标签:
411 人看过