数据库性能优化

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副表中不存在数据,则需要将整张表都检索完,性能会出现下降的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值