1.shardingsphere
1.1 shardingsphere优点
当数据量达到一定程度时,需考虑进行分表处理,如原本的数据量有5000w,但是该数据量存储到一张表中时,在对该表进行查询以及数据插入时,会对该表有着过大的压力,导致检索和插入数据的性能降低
此时,将5000w数据依次插入到25张表中,每张表存储200w数据,大大降低了表检索以及插入数据的压力
1.2 shardingsphere缺点
但是此时有一个问题,在进行全表查询时,如我现在需要一条数据,但是我不清楚该数据在哪一张表中,此时就需要进行全表查询,对25张表依次进行检索,相当于检索25次
如果是两张都需要进行分表,则会出现倍增,如第一张表是15张,第二张表是20张,倍增后就需要检索300次
解决方案:通过自定义设置分片规则,不需要每一次都进行全表查询,同时在查询时都需要传入分片键,以解决检索过多的问题
注:在使用shardingsphere分表进行大数据量处理时,需提前设置好分片键以用来提高性能,或者分的表较少,也可以直接进行全表查询,如果每次都进行50张表的检索,性能很容易爆掉
1.3 shardingsphere全表查询处理方式:
在进入持久层处理前,通过shardingsphere自带的sql解析功能,解析成shardsphere的分表sql集合,并在其中通过线程进行处理,如,查完第一个sql后,如果返回的数据量已经达到了所需数据量直接进行返回,如果不够所需数据量,则继续进行表数据查询,直到查询完所有的表或者查询到所需数据量
2.一张表500w数据
一张表的存储数据量最好稳定在200w左右,500w数据量以及算很大的数据量,大于200w数据量的情况下,数据库的性能会下降的很厉害,推荐进行分表
在一张表500w数据量时,进行表检索以及数据插入都有着很大的压力,解决方案如下
2.1添加索引
在查询优化上可以通过对表中字段添加索引去进行查询,以增加查询的性能
但是在查询时,如果不对索引的字段添加查询条件,在进行查询时,会直接默认进行全表查询,不会走字段索引,也不会对查询进行查询性能提升,反而会加大数据库该字段存储的内存,同时也会减慢数据插入的速度(在不添加索引时是0.5秒插入进数据,但是在添加索引后,会增加到1.5秒,大数据量的情况下)
2.2 添加分区
在大数据量且数据量比较杂的情况下不建议添加数据分区,这会增大数据的存储内存,比如500w数据中有100w个不同的数据量,不可能给表加100w个分区
如果500w中,有5个100w的数据的值是相同的,比如这100w数据有一个字段的值全部相同,另100w数据有一个字段的值全部相同,那就可以对该表添加分区,以优化检索速度
通过分区优化检索速度和索引一样,在进行查询时也需要分区的字段添加对应的查询条件,以触发分区
如果不触发分区,不走分区,会浪费数据库的存储容量以及数据插入的速度
2.3优化sql查询条件
sql查询,如select * from table limit 1,100
在没有添加查询条件时,默认是全表查询,如果limit 10000000,100
性能会特别慢,因为此次查询时,没有走索引,直接进行的全表检索
2.3.1优化方式
如果在表中的字段上添加了索引,可以对进行查询条件优化,从条件检索优化到范围检索
如果表中字段不存在索引,可以使用主键,主键索引,如select * from table where id between 1 and 10000,就可以进行优化,从全表扫描优化到范围扫描
2.3.2 两表联查
在进行两表联查时,不推荐使用inner join,使用left join,同时在两张表的关联键的字段上添加索引以达到速度优化
inner join的缺点
如果inner join副表中不存在数据,则需要将整张表都检索完,性能会出现下降的情况