关于分区视图及查询优化的问题
大量的历史数据(几百万行),其中一列为会计期间PeriodID char(6), yyyymm格式,该数据经常被用来做查询,生成报表,由于行数太多,消耗时间也多,因此考虑作水平分区,每年一张表:
tb2000, tb2001, ... , tb2003
每张表各自在periodID上做了约束,如tb2001,check(left(PeriodID,4)='2001')
然后
create view viewTb as
select * from tb2000
union all
select * from tb2001
....
由于条件所制,拆开的表实际上还放在同一个服务器的同一个MDB里,没有分开到几个盘或几个服务器上去。
我希望是达到这样的效果,在写查询语句的时候统一都是对viewTB进行,但如果条件中有left(PeriodID,4)='2001'时,系统能根据这个条件自动判断出应该只对tb2001进行SCAN,从而达到提高效率的目的,但我现在不太确定,我现在这样做是不是能够达到这一目的,或者我应该怎么做才行。
另外,如果我要对某一会计期间(如200109)的数据进行查询,那查询条件是不是一定要这样写:
left(PeriodID,4)='2001' and right(periodID,2)='09'
直接写periodID='200109',系统有那么聪明吗?
谢谢!