Untuk menguji ini, percobaan sebenarnya perlu mempartisi tabel. Lihat http://www.kodyaz.com/articles/how-to-partition-table-non-partitioned-table-sql-server-2008.aspx
Meminta fungsi partisi hanya memberi tahu Anda apa yang dikatakan fungsi partisi. Tidak disebutkan di mana data disimpan. Anda dapat mengatur fungsi partisi dan menjalankannya tanpa benar-benar mempartisi tabel, seperti yang telah ditunjukkan di sini.
Untuk mempartisi tabel, Anda juga harus membuat grup file dan skema partisi yang menggunakan fungsi partisi untuk menetapkan hasil fungsi ke grup file. Maka Anda harus meletakkan kunci berkerumun di tabel yang menggunakan skema partisi itu.
Siapkan partisi
Saya bukan ahli dalam baris perintah SQL. Saya menggunakan antarmuka SSMS untuk mengatur grup file pfg1 (dengan file pf1) dan pfg2 (dengan file pf2). Lalu saya mendeklarasikan fungsi dan skema partisi:
CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
CREATE PARTITION SCHEME ps_IDRange1
AS PARTITION IDRange1
TO (pfg1, pfg2)
GO
Buat tabel dan indeks berkerumun
CREATE TABLE [IDRanges](
[ID] [int] NOT NULL
)
GO
CREATE CLUSTERED INDEX PK_IDRanges
ON dbo.IDRanges(id) ON ps_IDRange1 (ID)
GO
Setelah Anda melakukan ini, ketika Anda kueri sys.partitions (I have 2005), Anda melihat bahwa tabel sekarang memiliki dua partisi bukan hanya satu untuk tabel. Ini menunjukkan bahwa kami telah mengimplementasikan partisi sepenuhnya untuk tabel ini.
select * from sys.partitions where object_id = object_id('IDRanges')
partisi_id object_id index_id partisi_number baris hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 0
72057597780361216 770674389 1 2 72057597780361216 0
Sekarang kami memiliki dua partisi (dengan jumlah baris untuk masing-masing), kami dapat melakukan percobaan.
Masukkan baris
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
Periksa partisi sys.art untuk melihat apa yang terjadi.
select * from sys.partitions where object_id = object_id('IDRanges')
partisi_id object_id index_id partisi_number baris hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 1
72057597780361216 770674389 1 2 72057597780361216 1
Ya. Satu baris di setiap partisi.
Pindahkan satu baris.
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
Periksa partisi
select * from sys.partitions where object_id = object_id('IDRanges')
partisi_id object_id index_id partisi_number baris hobt_id
-------------------- ----------- ----------- -------- -------- -------------------- --------------------
72057597780295680 770674389 1 1 72057597780295680 2
72057597780361216 770674389 1 2 72057597780361216 0
Partisi pertama sekarang memiliki dua baris, bukan 1, dan partisi kedua memiliki nol baris, bukan dua.
Saya pikir ini menegaskan bahwa baris secara otomatis dipindahkan sebagai hasil dari memodifikasi kunci yang dikelompokkan dalam tabel dipartisi.