背景:
系统交易量与日俱增。目前负责系统,数据库单表存放的数据量越来越大,目前已是百万级。查询速度变慢,所以在思考,与同事交流,网上找相应问题需要注意的风险,以及后续解决方案。
- 千万级数据库查询需要注意什么
- 建立索引(where,order by)
- 避免在where字句中,进行null值判断,导致引擎放弃使用索引,进行全表扫描
- 索引提高了查询效率,但是降低了insert和update效率,所以不是越多越好
- 数字,不要涉及为字符型,会降低查询连接性能。比较字符串,需要比较每一个,数字只需要比较一次
- 频繁和删除临时表,会增加系统表资源的消耗
- 如果使用了临时表,最后先显示存储,先truncate table 再 drop table
- != 和<>,or,以及在where 后面使用表达式,使用参数,都会导致全表扫描
原文链接: https://www.cnblogs.com/peke/p/8036172.html
- 千万级数据解决方案
- 将历史数据进行迁移。如果系统运行稳定,在固定时间内做历史数据迁移,我认为是一个挺有效的解决方案
2.分表方案:
1)一是根据自增主键进行哈希取模,将数据均分到n张表中;该方案最简单,且最合适,拆分后数据分布均匀。
2)二是无自增主键,选取的分表id由特定的方式生成,则需先确定分表id生成逻辑,根据该逻辑确定取模计算的逻辑,以保证数据均分。
原文链接:https://blog.csdn.net/Daybreak1209/article/details/79858080
https://blog.csdn.net/happyduoduo1/article/details/51830361/