当MySQL单表记录数过大时,数据库的增删改查性能会明显下降,常见的优化方法如下:
(1)限定数据的范围
务必禁止不带任何限制数据范围条件的查询语句。比如我们当用户在查询订单历史的时候,可以控制在一个月范围内。
(2)读写分离
经典的数据库拆分方案,主库负责写,从库负责读。
(3)垂直分区
根据数据库里面数据表的相关性进行拆分。例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。
垂直拆分就是指数据表列的拆分,把一张列比较多的表拆分成多张表。
垂直拆分的优点:可以使得列数据变小,在查询时减少读取的block数,减少IO次数。另外,垂直分区可以简化表的结构,易于维护。
垂直拆分的缺点:主键会出现冗余,需要管理冗余列,并会引起join操作,可以通过在应用层进行join来解决。此外,垂直分区还会使得事务变得更复杂。