Postgres dapat menggunakan kolom non-utama dalam indeks b-tree, tetapi dalam mode yang jauh lebih efisien.
Jika kolom pertama sangat selektif (hanya beberapa baris per A
) maka Anda hampir tidak akan melihat perbedaan kinerja karena salah satu metode akses (bahkan pemindaian berurutan atas set yang dikurangi) murah. Hit kinerja bertambah dengan jumlah baris per A
.
Untuk kasus yang Anda jelaskan saya sarankan untuk membuat indeks pada (A, C, B)
atau (C, A, B)
(pastikan B
datang terakhir) untuk mengoptimalkan kinerja. Dengan cara ini Anda mendapatkan kinerja terbaik untuk kueri di (A, B, C)
dan pada (A, C)
sama.
Berbeda dengan urutan kolom dalam indeks, urutan predikat dalam kueri tidak menjadi masalah.
Kami telah membahas ini dengan sangat rinci di dba.SE:
Perhatikan bahwa ini tidak peduli apakah Anda memimpin dengan A, C
atau C, A
untuk kasus yang ada:
Ada juga beberapa pertimbangan lain, tetapi pertanyaan Anda tidak memiliki semua detail yang relevan.