美文网首页
数据库优化

数据库优化

作者: 小陈工 | 来源:发表于2022-06-11 12:32 被阅读0次

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

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

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

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、连接数、硬件资源的瓶颈。

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

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

相关文章

  • zabbix优化之进阶版

    官网调优 1. 数据库优化 1.设置数据库分区优化,buffer优化,hash优化, 说明:数据库分区优化的优点:...

  • 数据库存储原理特性索引优化

    说一下mysql数据库存储的原理? 事务的特性? 数据库索引 数据库怎么优化查询效率? 数据库优化方案 优化索引、...

  • MySQL优化

    数据库SQL优化大总结之 百万级数据库优化方案

  • 数据库索引创建与优化

    对于数据库的优化主要包括三个部分:查询优化、索引优化和字段类型优化,其中,索引优化则是数据库优化的重中之重。一个查...

  • 数据库调优

    数据库优化

  • 如何设计一个高并发的系统

    数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化 使用缓存、尽量减少数据库IO 分布式数据库、分布式...

  • Web性能优化常见技巧

    阶段一:访问网页地址 阶段二:发出请求:http请求优化 阶段三:访问数据库 (SQL数据库优化)后端优化 阶段四...

  • MySql数据库的优化--数据库设计上的优化

    Mysql数据的优化分为两个部分,一个是数据库设计上的优化,另一个是数据库执行时的优化。 数据库设计上的优化 有些...

  • MySQL数据库优化的这几种方式你都知道吗?

    数据库优化涉及到方方面面的知识,每种数据库的架构,优化方式也都有着很大的差异,如果想做好数据库优化要了解数据库的技...

  • mysql数据库优化 摘要

    数据库优化 sql语句优化 索引优化 加缓存 读写分离 分区 分布式数据库(垂直切分) 水平切分 MyISAM和I...

网友评论

      本文标题:数据库优化

      本文链接:https://www.haomeiwen.com/subject/vmnimrtx.html