Rumah >pangkalan data >tutorial mysql >Kekangan Unik Postgres vs. Indeks: Bilakah Anda Harus Menggunakan Yang Mana?
Kekangan dan indeks unik kedua-duanya digunakan untuk memastikan keunikan data dalam jadual pangkalan data. Walau bagaimanapun, terdapat beberapa perbezaan utama antara kedua-dua pendekatan.
Kekangan Unik
CONSTRAINT
. Indeks
CREATE INDEX
. Menurut dokumentasi Postgres, menggunakan ALTER TABLE ... ADD CONSTRAINT
ialah cara pilihan untuk menambah kekangan unik pada jadual. Ini kerana mencipta indeks unik khusus untuk menguatkuasakan keunikan dianggap sebagai butiran pelaksanaan dan tidak boleh diakses secara langsung.
Prestasi: Secara amnya, kekangan unik dan indeks unik menunjukkan prestasi yang sama dari segi kelajuan pertanyaan. Walau bagaimanapun, indeks separa boleh meningkatkan prestasi pertanyaan yang hanya mengakses subset data.
Kunci asing: Kekangan unik boleh dirujuk oleh kunci asing, tetapi indeks unik tidak boleh.
Kekangan Overhed: Kekangan unik mempunyai sedikit overhed berbanding indeks unik kerana ia memerlukan operasi penyelenggaraan tambahan apabila memasukkan atau mengemas kini data.
Untuk menggambarkan perbezaan antara kekangan unik dan indeks, mari buat jadual dengan kedua-dua kekangan unik dan indeks unik:
<code class="language-sql">CREATE TABLE foo ( id SERIAL PRIMARY KEY, code INTEGER, label TEXT, CONSTRAINT foo_uq UNIQUE (code, label) ); CREATE UNIQUE INDEX foo_idx ON foo (code, label);</code>
Kedua-dua kekangan unik (foo_uq) dan indeks unik (foo_idx) akan menguatkuasakan keunikan gabungan (kod, label). Walau bagaimanapun, anda harus lebih suka menggunakan kekangan unik kerana ia adalah pendekatan yang disyorkan dalam Postgres.
Indeks Separa
Untuk mencipta indeks separa, gunakan klausa CREATE INDEX
dalam pernyataan WHERE
:
<code class="language-sql">CREATE UNIQUE INDEX foo_partial_idx ON foo (code) WHERE label IS NOT NULL;</code>
Indeks ini hanya digunakan pada baris yang label
bukan NULL
.
Tambah kekangan menggunakan indeks
Anda tidak boleh menambah kekangan unik menggunakan indeks separa. Walau bagaimanapun, anda boleh membuat kekangan unik menggunakan indeks unik sedia ada:
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_partial_uq UNIQUE USING INDEX foo_partial_idx;</code>
Atas ialah kandungan terperinci Kekangan Unik Postgres vs. Indeks: Bilakah Anda Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!