陌上香坊是做盗版的网站吗,外国网站建站,产品推广网站设计,西安短视频拍摄制作公司当MySQL单表记录数过大时#xff0c;数据库的CRUD性能会明显下降#xff0c;一些常见的优化措施如下#xff1a;
1#xff1a;限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句。比如#xff1a;我们当用户在查询订单历史的时候#xff0c;我们可以控制在一个…当MySQL单表记录数过大时数据库的CRUD性能会明显下降一些常见的优化措施如下
1限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句。比如我们当用户在查询订单历史的时候我们可以控制在一个月的范围内
2 读/写分离 经典的数据库拆分方案主库负责写从库负责读
3垂直分区 根据数据库里面数据表的相关性进行拆分。 例如用户表中既有用户的登录信息又有用户的基本信息可以将用户表拆分成两个单独的表甚至放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分把一张列比较多的表拆分为多张表。
垂直拆分的优点 可以使得列数据变小在查询时减少读取的Block数减少I/O次数。此外垂直分区可以简化表的结构易于维护。
垂直拆分的缺点 主键会出现冗余需要管理冗余列并会引起Join操作可以通过在应用层 进行Join来解决。此外垂直分区会让事务变得更加复杂。
4水平分区 保持数据表结构不变通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中达 到了分布式的目的。 水平拆分可以支撑非常大的数据量。水平拆分是指数据表行的拆分表的行数超过200万行时就会变慢这时可以把一张的表的数据拆成多张表来存放。举个例子我们可以将用户信息表拆分成多个用户信息表这样就可以避免单一表数据量过大对性能造成影响。
水平拆分可以支持非常大的数据量。需要注意的一点是分表仅仅是解决了单一表数据过大的问题但由于表的数据还是在同一台机器上其实对于提升MySQL并发能力没有什么意义所以 水平拆分最好分库 水平拆分能够 支持非常大的数据量存储应用端改造也少但 分片事务难以解决 跨节点Join性能 较差逻辑复杂。《Java工程师修炼之道》的作者推荐 尽量不要对数据进行分片因为拆分会带来 逻辑、部署、运维的各种复杂度 一般的数据表在优化得当的情况下支撑千万以下的数据量是没有 太大问题的。如果实在要分片尽量选择客户端分片架构这样可以减少一次和中间件的网络I/O。
下面补充一下数据库分片的两种常见方案
1客户端代理 分片逻辑在应用端封装在jar包中通过修改或者封装JDBC层来实现。 当当网的 Sharding-JDBC 、阿里的TDDL是两种比较常用的实现。
2中间件代理 在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。 我们现在谈的 Mycat 、360的Atlas、网易的DDB等等都是这种架构的实现。