关于千万级的大表,单表查询优化问题

@TO关于千万级的大表,单表查询优化问题C

关于面试,千万级大表的单表查询优化问题

前段时间面试,被问到了千万数据级的大表,单表查询操作时如何优化的问题,以下是个人的一些见解及回答内容,如果有不对的地方,希望大家指出(最好的指明原因),有其他优化方法希望告知下
(数据库的话应该默认oracle、mysql,没有特别指明哪一种)

语法优化

首先查看,有没有致使索引失效,进行全表查询的地方,例如:<、>等,看看能不能去除,如果不能,就在进行这类操作前先进行其他条件的过滤。
查看 in 中的条件数据多少,如果多的话换成exists。 (我在想单表查询时,是不是不用考虑子查询的情况?,这个回答是不是多余)

建索引

对常用且重复率低的字段,建索引。重复率高的字段效率不高(当时我回答的大概这意思)

增加过滤条件

查找有无查询条件,能使数据在进行使“索引失效、全表查询的语句"前大幅减小范围,例如,省、市,月份等,

建中间表

在晚上,跑报表,如果不是查询实时信息,就对报表中数据就行查询。

横向、纵向拆表

横向拆表:对常用字段、不常用字段进行拆分
纵向拆表:例如按月份、年份进行分表
(后来面试官说,全字段都要,就一个表查询就要10多秒,然后就想不到有什么办法了,有种黔驴技穷的感觉。)

使用缓存

使用例如 ehcache、redis等工具进行缓存

对数据库进行读写分离

对数据库进行读写分离(没回答更多内容了)

总结

以上差不多就是我对这个问题的全部回答(见解?)
当被问到还有没有其他方法时,想了些许真想不到了,只能无奈的回答“想不到了”。来个大神给教教- - ,不管从面试的角度、还是技术的角度.

你可能感兴趣的:(面试,数据库)