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

Perlu dua indeks pada tabel gabungan HABTM?

Tutup - kemungkinan besar Anda menginginkan yang berikut ini:

add_index :person_products, [:person_id, :product_id], :unique => true
add_index :person_products, :product_id

:unique => true tidak sepenuhnya diperlukan dan itu tergantung apakah masuk akal untuk memiliki seseorang yang terkait dengan suatu produk beberapa kali. Saya akan mengatakan jika Anda tidak yakin, Anda mungkin melakukannya ingin :unique bendera.

Alasan struktur indeks adalah bahwa semua database modern dapat mengeksekusi kueri pada person_id dan product_id menggunakan indeks pertama terlepas dari urutan yang ditentukan dalam kueri . Mis.

SELECT foo FROM bar WHERE person_id = 1 AND product_id = 2
SELECT foo FROM bar WHERE product_id = 2 AND person_id = 1

diperlakukan sama dan database cukup pintar untuk menggunakan indeks pertama.

Demikian juga, kueri hanya menggunakan person_id juga dapat dijalankan menggunakan indeks pertama. Indeks b-tree multi-kolom dapat menggunakan lebih sedikit kolom daripada yang disediakan, jika ditentukan dari kiri deklarasi asli.

Untuk kueri hanya menggunakan product_id , ini tidak dapat dijalankan terhadap indeks pertama (karena indeks itu ditentukan dengan person_id di posisi paling kiri). Oleh karena itu, Anda memerlukan indeks terpisah untuk mengaktifkan pencarian di bidang itu saja.

Properti indeks b-tree multi-kolom juga meluas ke indeks dengan jumlah kolom yang lebih tinggi. Jika Anda memiliki indeks di (person_id, product_id, favorite_color, shirt_size) , Anda dapat menggunakan indeks itu untuk menjalankan kueri menggunakan person_id , (person_id, product_id) , dll, selama urutannya sesuai dengan definisi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi ditolak (PGError) (postgresql dan Rails)

  2. Bagaimana melakukan urutan case-insensitive di Rails dengan postgresql

  3. ID penetapan otomatis Rails yang sudah ada

  4. Opsi Pemulihan Bencana untuk PostgreSQL yang Di-deploy ke Hybrid Cloud

  5. Bagaimana cara menghapus data dari beberapa tabel?