MySQL大表优化方案之升级硬件

升级硬件

Scale up,这个不多说了,根据MySQL是CPU密集型还是I/O密集型,通过提升CPU和内存、使用SSD,都能显著提升MySQL性能

读写分离

也是目前常用的优化,从库读主库写,一般不要采用双主或多主引入很多复杂性,尽量采用文中的其他方案来提高性能。同时目前很多拆分的解决方案同时也兼顾考虑了读写分离

缓存

缓存可以发生在这些层次:

  • MySQL内部:在系统调优参数介绍了相关设置
  • 数据访问层:比如MyBatis针对SQL语句做缓存,而Hibernate可以精确到单个记录,这里缓存的对象主要是持久化对象Persistence Object
  • 应用服务层:这里可以通过编程手段对缓存做到更精准的控制和更多的实现策略,这里缓存的对象是数据传输对象Data Transfer Object
  • Web层:针对web页面做缓存
  • 浏览器客户端:用户端的缓存

可以根据实际情况在一个层次或多个层次结合加入缓存。这里重点介绍下服务层的缓存实现,目前主要有两种方式:

  • 直写式(Write Through):在数据写入数据库后,同时更新缓存,维持数据库与缓存的一致性。这也是当前大多数应用缓存框架如Spring Cache的工作方式。这种实现非常简单,同步好,但效率一般。
  • 回写式(Write Back):当有数据要写入数据库时,只会更新缓存,然后异步批量的将缓存数据同步到数据库上。这种实现比较复杂,需要较多的应用逻辑,同时可能会产生数据库与缓存的不同步,但效率非常高。

表分区

MySQL在5.1版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码

对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子。MySQL实现分区的方式也意味着索引也是按照分区的子表定义,没有全局索引

MySQL大表优化方案之升级硬件

用户的SQL语句是需要针对分区表做优化,SQL条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,可以通过EXPLAIN PARTITIONS来查看某条SQL语句会落在那些分区上,从而进行SQL优化,如下图5条记录落在两个分区上:

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/4601.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2018年3月10日
下一篇 2018年3月10日

相关推荐

  • 聊聊eclipse怎么向数据库中添加数据。

    在Eclipse中,可以使用JDBC(Java Database Connectivity)向数据库添加数据。首先需要建立数据库连接,然后使用PreparedStatement对象执行SQL插入语句。 Eclipse是一个功能强大的集成开发环境(IDE),它支持多种…

    2024年7月8日
    00
  • 聊聊延迟低的vps。

    “提供低延迟的VPS服务,确保数据快速传输和高效处理。” 在当今的互联网时代,VPS(Virtual Private Server,虚拟专用服务器)已经成为了许多网站和应用程序的首选托管方式,随着网络应用的复杂性和用户…

    2024年7月23日
    00
  • 我来说说dedecms配置。

    DedeCMS系统参数设置通常放在系统的后台管理界面中,而不是直接存储在数据库的数据表中,这些设置信息会被保存在数据库中,以便在系统重启或升级时能够恢复。 在DedeCMS系统中,系统参数设置主要通过后台的“系统”模…

    2024年6月28日
    00
  • 我来教你asp.net web连接数据库的方法是什么。

    在ASP.NET Web应用程序中,连接数据库的方法主要有两种。一种是使用ADO.NET来连接数据库,这需要创建一个数据库连接,设置连接字符串,指定数据库的服务器名称,数据库名称,用户名等。另一种是使用MySQL for Visua…

    2024年7月18日
    00
  • 聊聊Android内置SQLite的使用详细介绍。

    Android内置了SQLite数据库,可以通过SQLiteOpenHelper类来创建和操作数据库。 Android内置SQLite的使用详细介绍 SQLite是一个轻量级的数据库,它被广泛应用在各种移动设备上,在Android中,我们可以直接使用SQLite…

    2024年7月9日
    00
  • 小编分享利用MySQL实现一行转换多行的技巧。

    在MySQL中,有时候我们需要将一行数据转换为多行数据,这种情况通常发生在需要对某个字段的值进行拆分的时候,我们有一个包含地址信息的表,每个地址信息都存储在一个字段中,现在需要将这些地址信息拆分成多个行,…

    2024年6月20日
    00
  • 关于怎么解决Tomcat启动慢的问题。

    Tomcat启动慢的问题可能由多种因素引起,解决此问题需要系统地诊断并采取相应的优化措施,以下是一些可能导致Tomcat启动缓慢的常见原因及其解决方案: (图片来源网络,侵删) 1. 硬件资源限制 解决方案 升级硬件:…

    2024年6月27日
    00
  • 我来教你MySQL中如何使用nvl函数。

    在MySQL中,使用IFNULL函数替代NVL函数。示例:SELECT IFNULL(column_name, value_if_null) FROM table_name;。 在MySQL中,NVL()函数用于将NULL值替换为另一个值,它的语法如下: NVL(expression, value_if_null) …

    2024年6月26日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息