偶上家公司明确规定,一张表不能超过5000万,因为查询效率会有更大的降低!
无论如何,看下如何优化数据查询吧!
①,单库单表:
1,加索引,一个好的索引能用空间换取查询时间的大为降低!
2,使用存储过程:减少sql编译的时间!
3,优化sql:包括联合查询的指向,where,order语句使用索引字段,减少使用多表联合查询,不要使用select *等等!
4,参数配置:扩大内存,调节线程池参数等等!
5,开启缓存:开启二级缓存,三级缓存,提升查询效率!
②,单库多表:
使用水平拆分(比如按月份),将表分为12张表,然后在代码端按照月份访问相应月份的表!
使用垂直拆分:很多字段只是作为保存记录用,(像一些约定,备注啥的字段往往很大),可以将查询中常常用到的字段放在常用的一张表中做查询,另一些字段放另一张表中存储,通过某个唯一索引字段联系起来,可以保证查询效率大为提升(因为磁盘IO减少)!
③,多库多表:
①,主从读写分离:表中数据虽然还是一致,但是由于多个从库读,主库写数据,大大减少共享锁的性能开销!
②,分库分表:指定一个字段作为,分库字段,利用hash值或者其它策略,分布在不同的库里面,在按照相应分布策略(比如上面的水平拆分或者垂直拆分),分散到不同的表里!
比如大家现在的数据库设计为8库1024表,你的将近一亿的数据在大家的单张表里面只有不到10W!
虽然理论上,一张表的大小不做任何限制,但是基于查询效率,索引性能等,不宜超出5000万数据!
关于多线程,分布式,微服务,数据库,缓存的更多干货,会继续分享,敬请关注。。