- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL Server 分区视图
SQL Server 分区视图2011-05-17 20:58SQL Server 分区视图?在数据库中,对于一些长年累月不断递增的表,难免会发生执行速度越来越慢的问题。做分区表,是一种解决办法。“:假如条件不允许做分区表的话,例如:当你创建一个分区函数的时候,系统提示你:只能在 SQL Server Enterprise Edition 中创建分区函数。只有 SQL Server Enterprise Edition 支持分区。那么分区表,是没法用了,只能想别的办法了。?情况一或者是 数据库里面的一张大表,已经按时间,拆分为多个小表了。但是客户要求软件里面,查询数据,要和没拆分之前一样。例如:原先的 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 表的部分数据.?情况二或者是数据库本身就被设计成多张小表。例如:有个 仓库字典表 记录着仓库的名字,仓库的表名。表里面的数据可能是大仓库1? tab_big1大仓库2? tab_big2小仓库1? tab_small小仓库2? tab_small小仓库3? tab_small有很多个 仓库表(表名就是 仓库字典表中所定义的),记录着当前仓库存储着什么物品。当你要查询某个仓库的库存报表的时候。不好意思,你要先去 仓库字典表 ,先查询出这个仓库名字 所对应的 数据库表名称叫啥。然后再 SELECT * FROM 表名。如果你要查询,现在这个时候,某样物品,都在哪些仓库有,各有多少个,那就更悲惨了。要 DISTINCT 仓库字典表中的 表名,然后依次去检索 每个仓库的数据。普通的视图,可以解决上面的 多次检索表的问题。但是性能上恐怕不能接受。看了一下 SQL Server 的分区视图,主要是要求,创建视图中的每个表,需要有一个独立的约束信息。让数据库引擎能够在查询的时候,知道哪些表,是可以忽略的。从而避免不必要的查询开销。??例子一下面首先是那个 2008--今天的销售数据的例子:?注意,下面表定义中的 Check 是分区视图所必须的。如果没有 Check 约束,那么最后的视图,就仅仅是普通的视图。-- 2008年数据.CREATE TABLE sale_data_2008(? sale_date? DATETIME NOT NULL ,? sale_item? VARCHAR(2) NOT NULL ,? sale_money DECIMAL(10,2) NOT NULL,? CHECK (sale_date = 2008-01-01 00:00:00???????? AND sale_date 2009-01-01 00:00:00),? PRIMARY KEY (sale_date, sale_item));GO-- 2009年数据.CREATE TABLE sale_data_2009(? sale_date? DATETIME NOT NULL ,? sale_item? VARCHAR(2) NOT NULL ,? sale_money DECIMAL(10,2) NOT NULL,?CHECK (sale_date = 2009-01-01 00:00:00???????? AND sale_date 2010-01-01 00:00:00),? PRIMARY KEY (sale_date, sale_item));GO-- 2010年数据.CREATE TABLE sale_data_2010(? sale_date? DATETIME NOT NULL ,? sale_item? VARCHAR(2) NOT NULL ,? sale_money DECIMAL(10,2) NOT NULL,? CHECK (sale_date = 2010-01-01 00:00:00???????? AND sale_date 2011-01-01 00:00:00),? PRIMARY KEY (sale_date, sale_item));GO-- 当前数据.CREATE TABLE sale_data(? sale_date? DATETIME NOT NULL ,? sale_item? VARCHAR(2) NOT NULL ,? sale_m
文档评论(0)