日期:2014-05-18  浏览次数:20582 次

海量数据库 腾讯面试题
今天去腾讯实习生面试,面试官给了一个题目。

现在有30张表,每张表记录了当天的登录用户信息(一个用户由于时间不同可以有多项),每张表大约有8亿项。

现在要求使用SQL操作查找出这个月登陆次数最多的前N个用户。

大家多多提供思路啊。

后面还会继续加分。

------解决方案--------------------
假如在确定不修改原数据表结构以及在数据存储的时候不用其他处理方式的前提下,可以在30张表中的时间列上建立索引。创建1个临时表T1,分别将30张表中当月的数据统计到临时表T1中。最后用临时表T1进行相关统计。这样数据应该少了很多,减少了磁盘I/O。
------解决方案--------------------
也可以建立视图,数据来源于基表,可以将数据是当月的分散,查询或处理过程中可以基于视图进行,这样分散了磁盘I/O。在用临时表进行最后的统计操作。
------解决方案--------------------
跟我前面 面拓维搜索部的问题差不多
用倒置哈希、建好索引实现分块查找。最好是修改数据库 SQL语句的算法

------解决方案--------------------
楼主如果用得oracle的话可以考虑,/*+ parallel(t,4)*/开启了数据库并行处理