Saat Anda membuat tabel yang dipartisi di SQL Server, Anda menentukan nilai mana yang masuk ke setiap partisi.
Ini dilakukan saat Anda membuat fungsi partisi. Saat Anda membuat fungsi partisi, Anda menentukan nilai batas, yang menentukan nilai mana yang masuk ke setiap partisi.
Setelah Anda membuat tabel yang dipartisi, dan Anda telah memasukkan data, Anda dapat menjalankan SELECT
normal pernyataan untuk mengembalikan data, seperti yang Anda lakukan dengan tabel yang tidak dipartisi (sebenarnya, bahkan tabel yang tidak dipartisi memiliki satu partisi).
Namun tahukah Anda bahwa Anda juga dapat menentukan dari partisi mana Anda ingin datanya?
Anda dapat melakukannya dengan bantuan $PARTITION
fungsi sistem di WHERE
. Anda ayat.
Contoh
Bayangkan kita memiliki tabel yang dipartisi yang berisi data berikut:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
Dan CatId
adalah kolom partisi.
Dan kami menggunakan fungsi partisi berikut untuk membuat partisinya:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Ini memberitahu kita bagaimana data disimpan, sesuai dengan nilai di kolom partisi.
Jadi sekarang kita dapat menjalankan kueri yang hanya mengembalikan data dari partisi tertentu.
Mengembalikan Data dari Partisi Kedua
Berikut cara mengembalikan semua baris dari partisi kedua.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Hasil:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Mengembalikan Data dari Partisi Ketiga
Dan inilah semua data dari partisi ketiga.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Mengembalikan Data dari Partisi Pertama dan Terakhir
Dalam hal ini, partisi pertama saya kosong, karena tidak ada nilai negatif di CatId
kolom.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Hasil:
(0 rows affected)
Demikian pula, partisi terakhir juga kosong, karena tidak ada cukup baris untuk mengisi partisi tersebut.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Hasil:
(0 rows affected)
Ini mematuhi rekomendasi Microsoft untuk membiarkan partisi pertama dan terakhir kosong, untuk menghindari perpindahan data jika partisi tersebut dipecah atau digabungkan di masa mendatang.