业务库中,某业务表中记录比较多。有300多万。所以另外建一个查询库。每天将业务数据从业务库同步到查询库中,但系统中的部分查询功能,需要查询历史数据和实时数据,所以在存储过程中,通过UNION ALL,将两个库的数据进行连接。
业务库中数据并不多,每天也就几千条,数据主要在查询库中。但发现通过这样的处理,查询速度非常慢。如果不做UNION ALL,只查询查询库,速度是加了UNION ALL的10倍。也就是讲:这几千条业务库的记录,把整体数据的查询速度拖下了一个数量级。想请问下,遇到这类情况如何处理?能否通过加索引来优化?欢迎大家发表意见。谢谢。

解决方案 »

  1.   

    也就是讲:这几千条业务库的记录,把整体数据的查询速度拖下了一个数量级。查询的时候有Blocking吗?因为业务库会有DML操作,所以查询的时候可能被Block,看一下是不是这个问题。如果不是的话可以看一下执行计划,查询库和业务库有什么不同。
      

  2.   

    查询是在测试机中,进行的,没有Blocking
      

  3.   

    You should check your execution plan.  Another approach you can try is to divide up your select statement into two identical sections, one for your live data and another for your history data, and use UNION ALL to merge the results as final output.  This way, overhead for table join across database is minimized.