DB专题:1.大数据量的表如何提高性能

2019-02-17  本文已影响0人  北交吴志炜

优化的基础是找到当前的性能瓶颈,对症下药。大的方向上可以分为软件层面,硬件层面;软件层面也分dml层面,ddl层面

先说硬件层面,很多人会忽略
硬件层面包含哪些?mysql也好,oracle也好,本质上也是一个应用,需要消耗cpu,内存,磁盘,网络,等资源
那么相应的,处理速度更快的cpu,读写速度更快的ssd,更大的内存,更高的网络带宽,组网配置,也可能显著的提升性能

软件层面:从最微观的字段级别到最宏观的架构级别。

1.字段
字段的数据类型,尽量物尽其用,比如 tinyint可以搞定,不要去用int或者varchar,尽量不用blob这些字段,尽量不要用null值。不要select *,用什么,取什么

2.老生长谈,索引
是否走了索引,走的索引是不是区分度最大的最优索引。查询语句是不是稳定走索引?
如果索引本身有问题,需要调整索引;
如果因为语句的原因,比如 select a from table where func(x)=0,对查询条件左值加函数。比如like,not in <>,需要优化语句;
组和索引不符合最左匹配,可能dbms优化之后也会走索引,但是尽量不要让dbms帮我们干活;
如果是动态拼接sql,是否会导致某些场景走不了索引;
尽量使用force index等强制索引

  1. PreparedStatementCache(druid,dbcp等数据源都支持,配置不合理会带来内存问题 )

4.分区表(比较简单,mysql hash分区需要分区数为质数,否则不均匀)

5.分库 (需要借助中间件或者自己实现映射逻辑;跨分片查询,结果归并耗时)

6.读写分离(弱一致可以,强一致是不行的,比如状态机依赖这种)

7.缓存(可以缓存查询结果或者只缓存主键)

8.nosql(限制较多,acid,关联查询等)

上一篇下一篇

猜你喜欢

热点阅读