Rumah >pangkalan data >tutorial mysql >Kekangan Unik Postgres vs. Indeks: Bilakah Anda Harus Menggunakan Yang Mana?

Kekangan Unik Postgres vs. Indeks: Bilakah Anda Harus Menggunakan Yang Mana?

Linda Hamilton
Linda Hamiltonasal
2025-01-12 07:07:43595semak imbas

Postgres Unique Constraints vs. Indexes: When Should You Use Which?

Kekangan dan indeks unik Postgres

Pengenalan

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 dan indeks unik dalam Postgres

Kekangan Unik

  • Ditakrifkan secara eksplisit dalam definisi jadual menggunakan kata kunci CONSTRAINT.
  • Kuatkuasakan keunikan dengan menghalang nilai pendua daripada dimasukkan ke dalam lajur yang dinyatakan dalam kekangan.
  • boleh digunakan untuk mencipta kunci utama.
  • Sentiasa digunakan untuk semua baris dalam jadual.

Indeks

  • Dibuat menggunakan pernyataan CREATE INDEX.
  • Percepatkan pertanyaan dengan menyediakan cara yang lebih pantas untuk mencari data dalam jadual.
  • Boleh unik atau tidak unik.
  • Boleh digunakan pada semua baris atau hanya pada subset baris (indeks separa).

Kaedah yang disyorkan

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.

Hasil praktikal

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.

Contoh

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn