预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

SQLServer分区视图 2011-05-1720:58 SQLServer分区视图 在数据库中,对于一些长年累月不断递增的表,难免会发生执行速度越来越慢的问题。做分区表,是一种解决办法。“:>>>>>> 假如条件不允许做分区表的话,例如:当你创建一个分区函数的时候,系统提示你:只能在SQLServerEnterpriseEdition中创建分区函数。只有SQLServerEnterpriseEdition支持分区。 那么分区表,是没法用了,只能想别的办法了。 情况一 或者是数据库里面的一张大表,已经按时间,拆分为多个小表了。但是客户要求软件里面,查询数据,要和没拆分之前一样。例如:原先的sale_data包含2008年--今天的数据。现在的sale_data被拆分为sale_data_2008,sale_data_2009,sale_data_2010,sale_data(这个仅保存2011年数据)也就是假如客户要查询2009年12月-2010年1月的报表。不好意思,你要自己判断了。先判断时间2009年12月,然后去检索sale_data_2009表的部分数据接着再判断时间2010年1月,然后去检索sale_data_2010表的部分数据. 情况二 或者是数据库本身就被设计成多张小表。例如:有个仓库字典表记录着仓库的名字,仓库的表名。表里面的数据可能是大仓库1tab_big1大仓库2tab_big2小仓库1tab_small小仓库2tab_small小仓库3tab_small有很多个仓库表(表名就是仓库字典表中所定义的),记录着当前仓库存储着什么物品。当你要查询某个仓库的库存报表的时候。不好意思,你要先去仓库字典表,先查询出这个仓库名字所对应的数据库表名称叫啥。然后再SELECT*FROM表名。如果你要查询,现在这个时候,某样物品,都在哪些仓库有,各有多少个,那就更悲惨了。要DISTINCT仓库字典表中的表名,然后依次去检索每个仓库的数据。 普通的视图,可以解决上面的多次检索表的问题。但是性能上恐怕不能接受。 看了一下SQLServer的分区视图,主要是要求,创建视图中的每个表,需要有一个独立的约束信息。让数据库引擎能够在查询的时候,知道哪些表,是可以忽略的。从而避免不必要的查询开销。 例子一下面首先是那个2008--今天的销售数据的例子: 注意,下面表定义中的Check是分区视图所必须的。如果没有Check约束,那么最后的视图,就仅仅是普通的视图。 --2008年数据.CREATETABLEsale_data_2008(sale_dateDATETIMENOTNULL,sale_itemVARCHAR(2)NOTNULL,sale_moneyDECIMAL(10,2)NOTNULL,CHECK(sale_date>='2008-01-0100:00:00'ANDsale_date<'2009-01-0100:00:00'),PRIMARYKEY(sale_date,sale_item));GO --2009年数据.CREATETABLEsale_data_2009(sale_dateDATETIMENOTNULL,sale_itemVARCHAR(2)NOTNULL,sale_moneyDECIMAL(10,2)NOTNULL,CHECK(sale_date>='2009-01-0100:00:00'ANDsale_date<'2010-01-0100:00:00'),PRIMARYKEY(sale_date,sale_item));GO --2010年数据.CREATETABLEsale_data_2010(sale_dateDATETIMENOTNULL,sale_itemVARCHAR(2)NOTNULL,sale_moneyDECIMAL(10,2)NOTNULL,CHECK(sale_date>='2010-01-0100:00:00'ANDsale_date<'2011-01-0100:00:00'),PRIMARYKEY(sale_date,sale_item));GO --当前数据.CREATETABLEsale_data(sale_dateDATETIMENOTNULL,sale_itemVARCHAR(2)NOTNULL,sale_moneyDECIMAL(10,2)NOTNULL,CHECK(sale_date>='2011-01-0100:00:00'ANDsale_date<'2012-01-0100:00:00'),PRIMARYKEY(sale_date,sale_item));GO --创建分区视图CREATEVIEWv_sale_dataASSELECT*FROMsale_