查询语句:
select * from stroed110101 where id='98760987234' union all
select * from stroed110102 where id='98760987234' union all
select * from stroed110103 where id='98760987234' union all
select * from stroed110104 where id='98760987234' union all
select * from stroed110105 where id='98760987234' union all
select * from stroed110106 where id='98760987234' union all
select * from stroed110107 where id='98760987234' union all
                          .
                          .
                          .
select * from stroed110131 where id='98760987234' 
因为各地库存表中记录很多,无法全部保存在在SQL SERVER中的一个表中(总记录数有2000万左右)
因此需要对一种产品进行多表查找,但效率很低,该怎么写这样的SQL来解决实际问题?

解决方案 »

  1.   

    查之前先将所有表所有满足条件的记录insert进一个实表里,查的时候就from这个实表来查.每次都联合是很慢
      

  2.   

    楼主建立实时表union各个子表的过程本身就需要先将所有数据读入内存;
    然后将结果写入磁盘文件。
    也就是说
    你建立这个实时表本身就需要2000万次的磁盘I/O,慢是必然的;
    能否不要建立这个实时表;
      

  3.   

    具体的:
    水平分区视图组合方案下面这段摘自联机手册,与你描述的问题大致一致:-------------------------------
    组合分区数据
    Transact-SQL UNION 集合运算符可在视图内使用,以将来自不同表的两个或多个查询结果组合成单一的结果集。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表含有华盛顿的销售数据,另一个表含有加利福尼亚的销售数据,即可从 UNION 创建这两个表的视图。该视图代表了这两个区域的销售数据。使用分区视图时,首先创建几个相同的表,指定一个约束以决定可在各个表中添加的数据范围。视图即使用这些基表创建。当查询该视图时,SQL Server 自动决定查询所影响的表,并仅引用这些表。例如,如果一个查询指定只需要华盛顿州的销售数据,则 SQL Server 只读取含有华盛顿销售数据的表,而并不访问其余的表。
    -------------------------------请参考:联机手册
      -- 优化数据库性能 | 数据库设计 | 物理数据库设计 | 分区