PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Buat indeks unik pada kolom yang tidak unik

Indeks hanya dapat mengindeks baris aktual, bukan baris gabungan. Jadi, ya, sejauh indeks yang diinginkan berjalan, membuat tabel dengan nilai unik seperti yang Anda sebutkan adalah satu-satunya pilihan Anda. Terapkan integritas referensial dengan batasan kunci asing dari data.day ke days.day . Ini mungkin juga menjadi yang terbaik untuk kinerja, tergantung pada situasi lengkapnya.

Namun, karena ini tentang kinerja , ada solusi alternatif:Anda dapat menggunakan CTE rekursif untuk meniru pemindaian indeks longgar:

WITH RECURSIVE cte AS (
   (  -- parentheses required
   SELECT day FROM data ORDER BY 1 LIMIT 1
   )
   UNION ALL
   SELECT (SELECT day FROM data WHERE day > c.day ORDER BY 1 LIMIT 1)
   FROM   cte  c
   WHERE  c.day IS NOT NULL  -- exit condition
   )
SELECT day FROM cte;

Tanda kurung di sekitar SELECT first pertama diperlukan karena ORDER BY yang terlampir dan LIMIT klausa. Lihat:

Ini hanya membutuhkan indeks biasa pada day .

Ada berbagai varian, tergantung pada kueri Anda yang sebenarnya:

Selengkapnya dalam jawaban saya untuk pertanyaan tindak lanjut Anda:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengindeksan SQL pada varchar

  2. SqlAlchemy:Menanyakan panjang bidang json yang memiliki array

  3. Ikhtisar Berbagai Node Paket Tambahan di PostgreSQL

  4. Bagaimana cara mengembalikan hasil fungsi postgresql di c #? Keluaran konsol kosong

  5. Bagaimana cara berlangganan notifikasi pengguna baru?