Di SQL Server, keduanya NEWSEQUENTIALID()
fungsi dan NEWID()
fungsi membuat GUID (Pengidentifikasi Unik Global), juga dikenal sebagai UUID (Pengidentifikasi Unik Universal).
GUID dapat digunakan sebagai pengidentifikasi unik di kolom tipe pengidentifikasi unik , sehingga kedua fungsi tersebut dapat digunakan untuk tujuan tersebut.
Namun, ada perbedaan antara kedua fungsi ini yang dapat memengaruhi keputusan Anda untuk menggunakan salah satunya.
Perbedaan
Berikut adalah perbedaan utama antara kedua fungsi tersebut.
DEFAULT
batasan pada kolom tabel dengan tipe pengidentifikasi unik .NEWSEQUENTIALID()
, karena NEWID()
menyebabkan aktivitas acak dan menggunakan lebih sedikit halaman data yang di-cache.NEWID()
, karena NEWID
menyebabkan aktivitas acak dan menggunakan lebih sedikit halaman data yang di-cache. Menggunakan NEWSEQUENTIALID()
juga membantu mengisi data dan halaman indeks sepenuhnya.Saya yakin ada banyak perbedaan lain di baliknya, tetapi ini adalah perbedaan utama dari sudut pandang pengguna.
Contoh 1 – Membandingkan GUID
Berikut adalah contoh cepat untuk menunjukkan perbedaan dalam GUID yang dihasilkan masing-masing fungsi ini.
CREATE TABLE GUIDTest ( NewIdCol uniqueidentifier NOT NULL DEFAULT NEWID(), NewSequentialIdCol uniqueidentifier NOT NULL DEFAULT NEWSEQUENTIALID(), ); GO INSERT GUIDTest (NewIdCol, NewSequentialIdCol) VALUES (DEFAULT, DEFAULT); GO 20 SELECT NewIdCol AS [NEWID()], NewSequentialIdCol AS [NEWSEQUENTIALID()] FROM GUIDTest; GO
Hasil:
+--------------------------------------+--------------------------------------+ | NEWID() | NEWSEQUENTIALID() | |--------------------------------------+--------------------------------------| | 965320de-8997-4e37-8fe9-a7daa52b04aa | 246f433e-f36b-1410-8a80-007d2b533547 | | 5c038bef-c2e1-4558-bd91-49b98fde5c71 | 266f433e-f36b-1410-8a80-007d2b533547 | | e7cfba90-78b6-4360-87a8-0b392fd227e5 | 286f433e-f36b-1410-8a80-007d2b533547 | | 9bf5b052-7023-4f52-939e-b5fb8f8ea27a | 2a6f433e-f36b-1410-8a80-007d2b533547 | | ccb38891-3689-42ed-91f2-79ddf0abeb2f | 2c6f433e-f36b-1410-8a80-007d2b533547 | | 8646ab08-6e4b-4cd6-9b25-ec0440c0f7f3 | 2e6f433e-f36b-1410-8a80-007d2b533547 | | f14e18a5-669a-4a2d-8793-42b705fc134f | 306f433e-f36b-1410-8a80-007d2b533547 | | 09ec2418-cfa0-4c8b-9b08-78e6f7946488 | 326f433e-f36b-1410-8a80-007d2b533547 | | 3ca2b71c-5f84-4db9-aa0f-fb9f215ceb09 | 346f433e-f36b-1410-8a80-007d2b533547 | | ccaed0a6-5851-472d-8b6a-db29581f2a43 | 366f433e-f36b-1410-8a80-007d2b533547 | | be6f9d97-7c86-4e43-9127-1aaa0c75d8b5 | 386f433e-f36b-1410-8a80-007d2b533547 | | b4c7b9e9-6f0c-44fc-904b-1aae2dfd20f9 | 3a6f433e-f36b-1410-8a80-007d2b533547 | | 378b2be8-b368-462f-ad30-896b67974b11 | 3c6f433e-f36b-1410-8a80-007d2b533547 | | 390c58ce-8d5c-454b-8c80-e0a690f113b9 | 3e6f433e-f36b-1410-8a80-007d2b533547 | | 4d2d9c64-bf04-44d2-bee3-4a2a33da05bd | 406f433e-f36b-1410-8a80-007d2b533547 | | 87e73722-bc1c-43f1-b94d-c89053bdc408 | 426f433e-f36b-1410-8a80-007d2b533547 | | 2caf72a0-4a19-4743-b299-99610d44aab2 | 446f433e-f36b-1410-8a80-007d2b533547 | | 3ed0dd28-19d5-44f5-90dc-6ded08269b37 | 466f433e-f36b-1410-8a80-007d2b533547 | | ce768fd8-df02-4d8f-afd4-a62d04571713 | 486f433e-f36b-1410-8a80-007d2b533547 | | 6ca41865-bbee-418a-aa6d-582a4541119d | 4a6f433e-f36b-1410-8a80-007d2b533547 | +--------------------------------------+--------------------------------------+
Kita dapat melihat bahwa NEWSEQUENTIALID()
kolom bertambah secara berurutan, sedangkan NEWID()
kolom tampaknya acak.
Kedua kolom berisi GUID dan keduanya adalah pengidentifikasi unik jenis.
Pada NEWID()
kolom, kita dapat melihat bahwa semua nilai adalah RFC 4122 versi/(sub-tipe) 4, yang menentukan bahwa GUID dihasilkan secara acak atau pseudo-acak. Kami tahu ini versi 4 karena 4 ada di tempat yang relevan (semua baris berbentuk:
xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx
).
Contoh 2 – Penggunaan dalam Kueri
Seperti yang disebutkan, hanya NEWID()
dapat digunakan dalam query.
Misalnya, Anda dapat melakukan ini:
SELECT NEWID() AS [NEWID()];
Hasil:
+--------------------------------------+ | NEWID() | |--------------------------------------| | ba07340c-6308-44d0-8c4b-52ed5e4a1601 | +--------------------------------------+
Tapi Anda tidak bisa melakukan ini:
SELECT NEWSEQUENTIALID() AS [NEWSEQUENTIALID()];
Hasil:
Msg 302, Level 16, State 0, Line 1 The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.