【Java学习笔记(一百零六)】之 MYSQL 数据库结构优化,硬件优化,缓存优化

本文介绍了数据库结构优化的技巧,包括定义NOT NULL字段、使用合适的数据类型、表拆分(垂直和水平)、表分区和读写分离。硬件优化方面,强调了内存、磁盘、CPU和网络对性能的影响。缓存优化则提到了查询缓存、全局缓存和局部缓存的作用。这些方法能有效提升数据库性能和应对高并发场景。
摘要由CSDN通过智能技术生成

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 数据库结构优化

(一) 优化表结构

  1. 尽量定义表字段为NOT NULL,因为在MYSQL中含有空值的列很难查询优化;

  2. 对于只包含特定类型的字段,可以使用enum, set等数据类型;

  3. 数值型字段的比较比字符串效率高的多,字段类型尽量使用最小的数据类型;

  4. 尽量使用TINYINT, SMALLINT, MEDIUM_INT这种作为整数类型减少字段的字节数,指定宽度是没有用的,因为指定的类型标识范围时确定的;

  5. 单表的字段建议在20以内;

  6. 合理地加入冗余字段可以提高查询速度;

(二) 表拆分

       当一个表的数据量过多时,可以将其拆为多个表,有两种拆分方式,一种是垂直拆分,一种是水平拆分。

1. 垂直拆分

       按照子弹进行拆分,即把不同的列拆分到不同的表中。如用户表中的一些字段可能经常访问,则可以将这些字段放进一张表中,其他的字段放到另一张表中。

2. 水平拆分

       按照行进行拆分,常见的就是分库分表,将不同的行分到不同的表中,缓解表的访问压力。在查找时,在这些分表中同时查找。

(三) 表分区

       分区是用于例如日志记录,查询少的情景。一般用于后台的数据报表分析。Mysql主要支持四种模式的分区: range分区, List预定义列表分区, hash分区, key键值分区。

(四) 读写分离

       对于高并发的数据库访问,读操作一定比写操作更多,因此可以采用数据库集群的方式,设置一个主库为写库,其他从库为读库,缓解服务器的访问压力。Mysql自带了主从复制的功能,完成读写分离。


(五) 数据库集群

       使用MyCat搭建Mysql集群,使用多台服务器实现写操作,由MyCat负责维护集群节点。


二. 硬件优化

(一) 内存

       内存的IO比硬盘快多了,可以增加系统的缓冲区容量,减少磁盘的IO。

(二) 磁盘

       磁盘IO是制约MYSQL性能的最大因素之一,因此使用SSD或者PCIe SSD设备,购置阵列卡,选用RAID-10,使用高转速的机械盘。

(三) CPU

       CPU仅能决定运算速度,即使是运算速度也要取决于与内存之间的总线带宽,以及内存本身的速度。

(四) 网络

       选择网络延时低,吞吐量高的设备。


三. 缓存优化

(一) 查询缓存

       缓存MYSQL中的ResultSet,即一条SQL语句执行的结果集,只针对select语句。在接受到一条select语句的请求后,如果该语句满足查询缓存的要求,mysql会 直接根据预设的Hash算法将select语句以字符串的方式进行Hash计算,然后将得到的Hash值与搜索结果存入缓存中。

       同时,查询缓存也有一个缺陷,为了保证数据的一致性,当某个表的数据有任何变化时,都会导致所有引用了该表的select语句在查询缓存中的缓存数据失效。因此,对于数据变动十分频繁的情况,不能使用查询缓存。

(二) 全局缓存

       数据库是IO密集型应用,从内存中读取数据比硬盘读取要快多了,因此使用缓存是优化IO的首选。启动MYSQL时就需要分配总是存在的全局缓存,也可以在my.conf配置文件的[mysqld]中配置,查询缓存属于全局缓存。

(三) 局部缓存

       mysql还会为每个连接分配连接缓存,每个连接到服务器的线程都有自己的缓存,大概256k。

       还有很多内容,看笔记吧!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值