数据库优化

一、为什么要进行数据库优化?

当完成一个项目后,如果需要优化该项目的性能和提高并发性,就要用到数据库优化操作

 

二、如何进行数据库优化?

2.1在设计数据库表时要使用三范式设计,那什么是三范式呢?

           第一范式(1NF):符合1NF的关系中的每个属性都不可再分,1NF是所有关系型数据库的最基本要求

           第二范式(2NF):2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖

           第三范式(3NF):3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖

           BCNF范式:在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

    三范式基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题,体现了以空间换时间的理念

 

            

2.2建立MySQL索引:

            1.索引类型:主键 、唯一索引(unique index)、普通索引(key   index)、组合索引、外键

            2.其中组合索引使用时必须遵循最左原则:

                      比如如果建立组合索引的字段是usernama,city,age,

                      那么查询时只有usernname,city,age、usernname,city、usernname 才会用到该索引

            3.建立索引的优缺点:

                       优点:大大提高了数据库查询效率

                       缺点:降低了更新表的速度(增删改),原因是MySQL索引建立后会生成一个索引文件,

                                 该索引文件使用的是二叉树数据结构,当我们每次更新表数据时,

                                 它对应的索引文件都需要进行重构,如果索引太多而该表的数据又经常更新的话,

                                 就会频繁的重构索引文件,导致速度大大降低

 

2.3 SQL语句优化:

            1.查询数据时不要使用select *

            2.能使用联合查询,不使用嵌套(子查询),能不使用联合查询,尽量不用联合查询

            3.如果数据量很大的时候,就不再使用外键,因为维护外键有额外的开销,影响性能,可以在代码中控制数据一致

            4.使用慢查询分析工具分析效率低的sql语句   

 

2.4使用缓存:

            使用内存型数据库redis缓存数据,减少数据库查询操作

 

2.5数据库使用读写分离架构:

            1.读写分离的架构如下图所示:

            

                2.该架构的实现方法将主数据库的数据备份到多个从数据库中,当主数据库执行sql语句时,

                   它会将sql语句发给所有从数据库执行,保证了数据的一致性,我们把这种操作称为主从热备份 

 

    2.6当数据量非常庞大的时候,可以使用分库分表:

                1.分库分表的几种类型详解:

                          a.垂直分表:

                                    概念:垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”

                                              将表中的部分字段拆分到扩展表中

                                    优点:在字段很多的情况下,拆分开确实更便于开发和维护,某种意义上也能避免“跨页”的问题                                                (MySQL底层都是通过“数据页”来存储的,“跨页”问题可能会造成额外的性能开销)

                          b.垂直分库:

                                    概念:按照业务模块来划分出不同的数据库,避免将所有数据表放到同一个数据库中

                                    优点:数据库的连接资源比较宝贵且单机处理能力也有限,在高并发场景下,

                                              垂直分库一定程度上能够突破 IO、连接数及单机硬件资源的瓶颈,

                                              是大型分布式系统中优化数据库架构的重要手段。

                                    缺点:拆分时一定要注意拆分的各个库之间必须相互独立,不然拆分后会遇到很多问题

                          c.水平分表

                                    概念:将表中不同的数据行按照一定规律分布到不同的数据库表中

                                             (这些表保存在同一个数据库中)

                                    优点:能够降低单表的数据量,一定程度上可以缓解查询性能瓶颈

                                    缺点:本质上这些表还保存在同一个库中,所以库级别还是会有 IO 瓶颈。

                                              所以,一般不建议采用这种做法。

                          d.水平分库分表:

                                    概念:将水平分表分出的表分别存放在不同的数据库中

                                    优点:在高并发和海量数据的场景下,分库分表能够有效缓解单机和单库的性能瓶颈和压力,

                                              突破 IO、连接数、硬件资源的瓶颈。

                                    缺点:硬件成本较高,也会带来一些复杂的技术问题和挑战

                                            (例如:跨分片的复杂查询,跨分片事务等)

 

 

 

 

 

            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值