实际工作中有这样一个项目:
1、有100多个数据表,每个大小不一,大的1000多万,小的几十万记录,根据需要做了索引,不经常更新,单表查询很快。以后可能逐步增加表的数量。
2、每次都要查询这100个表中有没有要找的数据,有的话显示出来,一般情况下会有十几张表中有数据,每个表有几条。
3、现在是使用php查询一个接一个的查询,查询时间就等于100个表每个表查询时间的总和,这样速度就感觉很慢了。想实现:
100多个表并行查询,最后一个查完后,统一把结果返回给用户,这样查询时间只是最慢那个表的时间。请有相关经验的说说,需要什么技术实现。

解决方案 »

  1.   

    mysql 不就有联合查询了吗?另外再用memcache 分布一下就行了.100多万的数据不多 ...
      

  2.   

    平均每个表有100万数据,不是所有,试过redis,和mongodb等,应为数据太大,不是合适的方案。
      

  3.   

    这个是有点意思的,还没时间测试,但总感觉不是很放心。
    PHP使用curl_multi_add_handle并行处理
    http://www.byywee.com/page/M0/S210/210538.html
    http://blog.csdn.net/21aspnet/article/details/7076003
      

  4.   

    loginnewman:能不能详细的解释一下你的方法。
      

  5.   

    =。= 这个的确是个常见场景嘛...日志信息的查询比如: log_20120101  log_20120202  …… log_20121221这种已经不是php能做到的了,因为就算php同时查询所有表,DB本身也会撑不住的....一般这种情况,如果是大型系统,可能设置多个SlaveDB,然后每个SlaveDB查询不同的表,最后再汇总结果比如:
    SlaveDB1 负责 log_20120101 …… log_20120601
    SlaveDB2 负责 log_20120602 …… log_20121221然后再由PHP汇总结果,得到结果所消耗的时间就是原来的一半,依次类推……
    前端如果再加上memcached或者redis之类的,缓存热数据,可以很明显的提升效率。
    同Mark,同求高端解决方案