积极答复者
自动表分区方案

问题
答案
-
那问下,分区键一定要是聚集索引的一部分才能发挥最大的性能吗?
Should put clustered index on partition key, otherwise will see performance issue.- 已建议为答案 Molly Chen_Moderator 2012年9月11日 2:26
- 已标记为答案 Molly Chen_Moderator 2012年9月21日 6:33
-
在对非唯一的聚集索引进行分区时,如果尚未指定分区依据列,则默认情况下数据库引擎将在聚集索引键列表中添加分区依据列。在对非唯一的非聚集索引进行分区时,如果尚未指定分区依据列,则数据库引擎会添加分区依据列作为索引的非键(包含)列。
想不想时已是想,不如不想都不想。
- 已标记为答案 Molly Chen_Moderator 2012年9月21日 6:33
全部回复
-
不知道这是不是你要的,有兴趣不妨参考看看。
http://msdn.microsoft.com/en-us/library/aa964122(v=sql.90).aspx
以上說明若有錯誤請指教,謝謝。
歡迎參觀我的BLOG - 積沙成塔 -
那问下,分区键一定要是聚集索引的一部分才能发挥最大的性能吗?
Should put clustered index on partition key, otherwise will see performance issue.- 已建议为答案 Molly Chen_Moderator 2012年9月11日 2:26
- 已标记为答案 Molly Chen_Moderator 2012年9月21日 6:33
-
-
在对非唯一的聚集索引进行分区时,如果尚未指定分区依据列,则默认情况下数据库引擎将在聚集索引键列表中添加分区依据列。在对非唯一的非聚集索引进行分区时,如果尚未指定分区依据列,则数据库引擎会添加分区依据列作为索引的非键(包含)列。
想不想时已是想,不如不想都不想。
- 已标记为答案 Molly Chen_Moderator 2012年9月21日 6:33
-
不一定要聚集索引吧,在SQL2005或以后版本引入的分区概念,表的存储是 分区-》页,一个分区有很多页,如果你不创建分区,实际上表的数据都已经在默认分区里了,
只不过创建分区把数据放在不同的分区里,这些分区又放在不同的文件组里,不同的文件组放在不同的硬盘里,这样来减少单独一个磁盘的I/O负载。
有没有分区对程序员都是透明的,程序员如常读取表数据就可以了。
请问杨国防大侠你怎麽知道一个分区被锁定呢?
如有错误还请大家指教
--创建分区函数 USE partionTest GO CREATE PARTITION FUNCTION PartionByInt(INT ) AS RANGE LEFT FOR VALUES (100,200,300) GO --创建分区方案 USE partionTest GO CREATE PARTITION SCHEME PartionByIntScheme AS PARTITION PartionByInt TO (FileGroup001,FileGroup002,FileGroup003,FileGroup004); --创建表 USE partionTest GO CREATE TABLE testPartionTable (id INT NOT NULL , ItemNo CHAR( 20), ItemName CHAR( 40)) ON PartionByIntScheme(ID); --插入数据 USE partionTest GO DECLARE @count INT SET @count =-25 WHILE @count <=100 BEGIN INSERT INTO dbo.testPartionTable SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>0 and <100' SET @count =@count +1 END SET @count =101 WHILE @count <=200 BEGIN INSERT INTO dbo.testPartionTable SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>100 and <200' SET @count =@count +1 END SET @count =201 WHILE @count <=300 BEGIN INSERT INTO dbo.testPartionTable SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>200 and <300' SET @count =@count +1 END SET @count =301 WHILE @count <=400 BEGIN INSERT INTO dbo.testPartionTable SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>300 and <400' SET @count =@count +1 END SET @count =401 WHILE @count <=500 BEGIN INSERT INTO dbo.testPartionTable SELECT @count ,'ITEM'+CONVERT( VARCHAR(6),@count),'>400 and <500' SET @count =@count +1 END SELECT * FROM dbo.testPartionTable GO --查看第三分区中所含记录 --$PARTITION系统函数用于为指定的分区函数返回分区号例如:$PARTITION.PartionByInt(ID)=3用于返回给ID所处的分区号 USE partionTest GO SELECT * FROM dbo.testPartionTable WHERE $PARTITION.PartionByInt(ID)=3 GO
-
我做的实验如下:
CREATE NONCLUSTERED INDEX AK_EN_F9997_tbname_EN_F9997_001 ON EN_F9997(
tbname, EN_F9997_001
)
ON date_schema(tbname)
tbname是分区键:
1.事务锁定分区9
BEGIN TRAN
UPDATE EN_F9997
SET EN_F9997_002=9
WHERE tbname=9
(26551 行受影响)
2.访问其它分区
SELECT * FROM EN_F9997 WHERE tbname<>9
处于堵塞状态出现这个情况就是因为我没对聚集索引进行分区