通常情况下,MySQL在单表数据超过100万,执行效率开始变慢,需要根据业务量进行硬件升级和数据库优化,而数据库优化主要包括:表结构优化、索引优化、SQL语句优化、分区储存、分表存储等等,本文专门来介绍数据库优化之一的分表储存优化。
分表储存,如果一张表中的数据可以分为多种不同的类型,并且对不同类型的数据同时操作的场景不多时,可以考虑把不同类型的数据保存在不同的表中。或者可以将一个大表拆分成多个小表,从而减小锁的粒度。比如某个表的访问频率很高,某个写操作只更改个别列的数据,而其他未被修改的列可能被别的查询请求访问,这时就可以通过分表来提高查询效率。
大部分cms程序都会把内容数据压缩到一张表中,如下图结构:
所有的内容都储存在这种表中,当数据量达到上百万以后,查询速度就会延迟。
分表储存方案
一、按内容模块储存数据
迅睿内容模块原理是按不同类型的数据创建,比如文章模块、图集模块、商品模块,这些模块的内容表都是分开储存的,如下图结构:
这样可以将网站的数据合理的按储存类别进行规划创建模块,独立模块更加有利于大数据储存。
二、按栏目进行主表分表储存(VIP支持)
按栏目作为分表,比如网站数据量有100w,按5个栏目分表,平均每个栏目储存20w数据,前端查询时在20w数据就比查询100w数据快很多。
配合(一)多模块+栏目分表可以大大提示储存效率。
三、内容附表无限分表
模块附表字段储存,通常情况下会把一些不用于列表显示的字段储存到data表,这样可以减轻查询表的字段负担,data表将按10w数据基数进行无限分表储存。