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

Beberapa indeks vs indeks tunggal pada beberapa kolom di postgresql

Terlepas dari berapa banyak indeks yang telah Anda buat pada relasi, hanya satu dari mereka yang akan digunakan dalam kueri tertentu (yang mana bergantung pada kueri, statistik, dll). Jadi dalam kasus Anda, Anda tidak akan mendapatkan keuntungan kumulatif dari membuat dua indeks kolom tunggal. Untuk mendapatkan performa maksimal dari indeks, saya sarankan untuk menggunakan indeks komposit pada (lokasi, stempel waktu).

Perhatikan, kueri seperti ... WHERE timestamp BETWEEN smth AND smth tidak akan menggunakan indeks di atas saat kueri seperti ... WHERE location = 'smth' atau ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth akan. Itu karena atribut pertama dalam indeks sangat penting untuk pencarian dan pengurutan.

Jangan lupa tampil

ANALYZE;

setelah pembuatan indeks untuk mengumpulkan statistik.

Pembaruan: Sebagai @MondKin disebutkan dalam komentar kueri tertentu sebenarnya dapat menggunakan beberapa indeks pada relasi yang sama. Misalnya, kueri dengan OR klausa seperti a = 123 OR b = 456 (dengan asumsi bahwa ada indeks untuk kedua kolom). Dalam hal ini postgres akan melakukan pemindaian indeks bitmap untuk kedua indeks, membangun gabungan bitmap yang dihasilkan dan menggunakannya untuk pemindaian heap bitmap. Dalam kondisi tertentu skema yang sama dapat digunakan untuk AND kueri tetapi alih-alih penyatuan akan ada persimpangan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:membuat kolom yang dihasilkan

  2. Pilih setiap bulan antara tanggal mulai dan akhir

  3. Fungsi PostgreSQl mengembalikan beberapa set hasil dinamis

  4. Memesan hasil model bersarang yang penuh semangat di Node Sequelize

  5. Permintaan PostgreSQL -- kolom tidak ada