Để kiểm tra điều này, thí nghiệm thực sự cần phân vùng bảng. Xem http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
Truy vấn chức năng phân vùng chỉ cho bạn biết chức năng phân vùng nói gì. Nó không nói nơi dữ liệu được lưu trữ. Bạn có thể thiết lập chức năng phân vùng và chạy nó mà không thực sự phân vùng bảng, như đã được chứng minh ở đây.
Để phân vùng bảng, bạn cũng phải tạo các nhóm tệp và sơ đồ phân vùng sử dụng chức năng phân vùng để gán kết quả chức năng cho các nhóm tệp. Sau đó, bạn phải đặt một khóa cụm trên bảng sử dụng sơ đồ phân vùng đó.
Thiết lập phân vùng
Tôi không phải là chuyên gia về dòng lệnh SQL. Tôi đã sử dụng giao diện SSMS để thiết lập các nhóm tệp pfg1 (với tệp pf1) và pfg2 (với tệp pf2). Sau đó, tôi đã khai báo hàm và lược đồ phân vùng:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Tạo bảng và chỉ mục cụm
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Sau khi bạn làm điều này, khi bạn truy vấn sys.partitions (Tôi có 2005), bạn sẽ thấy rằng bảng hiện có hai phân vùng thay vì chỉ một cho bảng. Điều này chỉ ra rằng chúng tôi đã thực hiện đầy đủ phân vùng cho bảng này.
select * from sys.partitions where object_id = object_id('IDRanges')
phân vùng_id object_id index_id phân vùng_number hobt_id hàng
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0 0
72057597780361216 770674389 1 2 72057597780361216 0 0
Bây giờ chúng tôi có hai phân vùng (với số lượng hàng cho mỗi), chúng tôi có thể tiến hành một thử nghiệm.
Chèn các hàng
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Kiểm tra sys.partitions để xem những gì đã xảy ra.
select * from sys.partitions where object_id = object_id('IDRanges')
phân vùng_id object_id index_id phân vùng_number hobt_id hàng
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Vâng. Một hàng trong mỗi phân vùng.
Di chuyển một hàng.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Kiểm tra các phân vùng
select * from sys.partitions where object_id = object_id('IDRanges')
phân vùng_id object_id index_id phân vùng_number hobt_id hàng
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0 0
Phân vùng đầu tiên bây giờ có hai hàng thay vì 1 và phân vùng thứ hai có 0 hàng thay vì hai.
Tôi nghĩ rằng điều này xác nhận rằng hàng đã được tự động di chuyển do sửa đổi khóa được nhóm trong một bảng được phân đoạn.