如何高效的查询需要合并大数据表的操作

1.存在两个数据库Shanghai和Beijing(假设其他数据丢失,中国人口数据只剩下上海和北京)
2.两个数据库中都有同样结构的表table_people,数据量都在一千万左右
3.有以下数据
Shanghai.table_people

id username birthday
1 jhon 2016-08-15 12:00:00
2 may 2016-08-14 13:00:00
3 abcd1111 2015-08-01 14:00:00
... .... .....

Beijing.table_people

id username birthday
1 mike 2016-08-16 23:58:00
2 kitty 2016-08-03 15:00:06
3 ab111 2014-01-01 15:16:18
... .... .....

问:
1.如何高效的(1s内)查出最近在中国出生的前十个人
2.对于YII框架数据提供器应该怎么写

阅读 5.8k
6 个回答
(SELECT * FROM Beijing.table_people ORDER BY birthday limit 10)
union all
(SELECT * FROM shanghai.table_people ORDER BY birthday limit 10)
ORDER BY birthday limit 10

你看这种思路可以吗?

birthday类型得是datetime不能是string,然后作索引。查的时候先union all再order by再limit 10。mysql内部应该是就是对两个索引做一下归并排序

如果想更快,就把birthday类型改成int的

每个表都取符合条件的前10条数据,然后再对取出来的数据在代码里排序并取出最终的前10条数据。

不过这样写代码也很累,以后加一个表就得改代码,所以建议找一下数据库中间件的相关资料。

两个sql,根据id desc 以及limit 10,都插入到一个临时表,对20条数据时间排序再limit10

新手上路,请多包涵

说合并的都是傻子,分别取两个表前10个,再合并,再取一次

1、首先改表结构,生日肯定要存int
2、加索引,这样查询的时候,直接走覆盖索引
3、分别查出前10条然后程序处理,或者写入临时表然后程序读取临时表

如果一定要扩展性跟方面都很好的话,数据量达到十几亿,那么就不要用mysql,可以用Hadoop&hive来查

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题