惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Threatpost
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
B
Blog
量子位
Scott Helme
Scott Helme
P
Proofpoint News Feed
NISL@THU
NISL@THU
Y
Y Combinator Blog
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
PCI Perspectives
PCI Perspectives
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
AI
AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cloudbric
Cloudbric
L
LangChain Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cisco Talos Blog
Cisco Talos Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
S
Secure Thoughts
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
AWS News Blog
AWS News Blog
C
Check Point Blog
Hacker News: Ask HN
Hacker News: Ask HN
雷峰网
雷峰网
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
V2EX - 技术
V2EX - 技术
Webroot Blog
Webroot Blog
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
O
OpenAI News
博客园 - 叶小钗
N
News | PayPal Newsroom
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Vercel News
Vercel News
小众软件
小众软件

博客园 - love .net FrameWork

Windows Forms 分页控件 WPF 插件开发(.NET Framework 3.5 System.Addin) 一生回味的100句凡人语录 经典短句 一生中必看的30个故事 别人看不懂的悲伤 Most of the 10 classic love sentence 5月28日 《魔兽争霸3》微操作基础教程 数据访问抽象基础类 无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login” - love .net FrameWork 看到一很好的SQL代码 拼接sql语句 关于ibatis.net框架(NPetshop学习) Stratrgy 策略模式 Factory Method 工厂方法模式(创建型模式) SQL各种日期转换代码大全 在ASP.NET中使用Session常见问题集锦(转) Sys.ArgumentOutOfRangeException: Value must be an integer - love .net FrameWork
SQL Server 2005 中的分区表和索引应用
love .net FrameWork · 2009-08-13 · via 博客园 - love .net FrameWork

      SQL Server 2005引入的表分区

技术,让用户能够把数据分散存放到不同的物理磁盘中,提高这些磁盘的并行处理性能以优化查询性能。
     

       表分区步骤:
       1. 创建文件组       
        下面建了三个分区,分别表示2008-2009年的订单数据,分属不同的磁盘上面:

ALTER DATABASE FrameWork ADD FILEGROUP [2009_Order]ALTER DATABASE FrameWork
ADD FILE 
(NAME 
= N'2009_Order',
FILENAME 
= N'E:\FrameWork\2009_Order.ndf',
SIZE 
= 20G,
MAXSIZE 
= 100G,
FILEGROWTH 
= 5G)
TO FILEGROUP [2009_Order]ALTER DATABASE FrameWork ADD FILEGROUP [2008_Order]ALTER DATABASE FrameWork
ADD FILE 
(NAME 
= N'2008_Order',
FILENAME 
= N'F:\FrameWork\2008_Order.ndf',
SIZE = 20G,
MAXSIZE 
= 100G,
FILEGROWTH 
= 5G)
TO FILEGROUP [2008_Order]ALTER DATABASE FrameWork ADD FILEGROUP [2010_Order]ALTER DATABASE FrameWork
ADD FILE 
(NAME 
= N'2010_Order',
FILENAME 
= N'G:\FrameWork\2010_Order.ndf',
SIZE = 20G,
MAXSIZE 
= 100G,
FILEGROWTH 
= 5G)
TO FILEGROUP [2010_Order]

FrameWork 是数据库名称   [2009_Order]表示文件名称     FILENAME 表示文件路径      
   2. 为范围分区创建分区函数

CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)
AS
RANGE 
LEFT FOR VALUES ('20081231 23:59:59.997',
            
'20091231 23:59:59.997')

      使用 datetime 数据类型确实增加了一定的复杂性,复杂性增加是因为 datetime 数据类型具有精度。必须选择 23:59:59.997 的原因在于,datetime 数据无法保证毫秒级别的精度。相反,datetime 数据的精度在 3.33 毫秒内。使用 23:59:59.999 这个确切的时间值是不行的,因为该值将被舍入到最接近的时间值,即第二天的 12:00:00.000 A.M。由于进行了这种舍入,将无法正确定义边界。对于 datetime 数据,必须对明确提供的毫秒值加倍小心。 
     不过这种情况我们可以再程序中处理避免。

      第一个分区将包含所有小于或等于 '20081231 23:59:59.997' 的值

      第二个分区将包含所有小于或等于 '20091231 23:59:59.997'  而且 大于 ‘20081231 23:59:59.997

      第三个分区将包含所有大于或者等于 '20091231 23:59:59.997' 的值

       3. 创建分区架构

CREATE PARTITION SCHEME OrderDatePScheme 
AS
PARTITION OrderDateRangePFN 
TO ([2008_Order][2009_Order],[2010_Order])

      

4. 创建分区表

--创建分区表
CREATE TABLE [dbo].[OrdersRange]  
(
[ID] [int] IDENTITY(1,1NOT NULL
[OrderName] [nvarchar](100NULL,
[OrderNumber] [int] NULL,
[OrderTime] [datetime] NULL,
[OrderText] [ntext] NULL
)
ON OrderDatePScheme ([OrderTime])
GO


现在可以插入数据了

DECLARE @Counter INT 
declare @date datetime 
SET @Counter = 0 
SET @date = '2010-10-1' 
WHILE (@Counter < 50000000
BEGIN 
insert into [OrdersRange] ([OrderName],[OrderNumber],[OrderTime],[OrderText])
values('2009 年数据',100,@date,'测试数据测试数据测试数据测试数据'
SET @Counter = @Counter + 1 
END

可以改变时间@date的值,然后会发现原来数据库中的文件并没有变化,而刚才新建在其他磁盘下的文件会根据你插入的数据的变化。
分区表的操作采用了CPU和I/O的并行操作,检索数据的数据量也变小了,定位数据所耗时间变短。

 查看分区表数据:

SELECT $PARTITION.OrderDateRangePFN(OrderTime) AS OrderTime, count(*AS [Rows In Partition]
       
FROM [OrdersRange] GROUP BY $partition.OrderDateRangePFN(OrderTime)

如何修改分区表:
比如现在是2010年了,接下来又要新增一个新的分区来保存2011年的数据了,或者保存将来几年的数据;
     1. 新建将来几年的文件组(方法和上面新建文件组的方法一下)
     2. 首先修改分区架构

 PARTITION SCHEME OrderDatePScheme
NEXT USED [2011_Order]

       上面修改分区架构表示新增了一个分区
     3. 修改分区函数

ALTER PARTITION FUNCTION OrderDateRangePFN() 
SPLIT RANGE (
'20101231 23:59:59.997')

       完成,注意修改完成后要检查书序是否正确,在存储-》分区方案  和 分区函数关系要对应

在已经存在的表上新建表分区
目前我的办法是新建一个表分区,然后把数据导入过去,不知道这个办法好不好,研究中......