最近想换工作了,面试经常被问道超大表查询优化方面的东西,在这里总结一下个人的一些心得,如果有幸被哪位技术大牛看到,不当之处请多多指教!
1:给需要高频查询的字段增加索引
2:优化查询sql执行效率
3:把现有表改为分区表
4:在应用层加缓存减少热点数据访问数据库的次数(如果是使用oracle的话,可以查看awr报告找到执行次数最多和执行效率最差 的一些sql,然后把这些操作用到的数据加载到缓存中)
5:使用分表/分库策略,把数据分散到不同的表/库中(如果业务流程都需要用到全表扫描则不太适合)
6:使用数据库读写分离(减轻服务器单节点的压力)
设计程序的时候如果预估数据会超过100W就应该考虑优化查询语句,增加索引等操作。
如果数据量会查过1000W就应该考虑 分区表+缓存的策略
如果分区表+缓存的策略也不行了那就考虑读写分离、分表、分库等方案
如果以上方案都用了还会有性能问题,那只能使用杀手锏nosql了,当前前提是这个大表不会涉及复杂的逻辑查询查询,最好只是简单的key-value查询(key-value高并发查询是mangodb、hbase等nosql产品的拿手好菜啊)
如果nosql也吃不消了,就只能阿弥陀佛自求多福了,我也没辙了。如果哪位大神有更好的方案 求指教