Saya tidak tahu apakah Pg dapat menggabungkan indeks GiST dan indeks b-tree biasa dengan pemindaian indeks bitmap, tetapi saya kira tidak. Anda mungkin mendapatkan hasil terbaik tanpa menambahkan user_id
kolom ke indeks GiST Anda (dan akibatnya membuatnya lebih besar dan lebih lambat untuk kueri lain yang tidak menggunakan user_id
).
Sebagai eksperimen, Anda dapat:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
yang kemungkinan menghasilkan indeks besar, tetapi mungkin meningkatkan kueri itu - jika berhasil. Ketahuilah bahwa mempertahankan indeks seperti itu akan sangat memperlambat INSERT
dan UPDATE
s. Jika Anda membuang ix_coords
yang lama kueri Anda akan menggunakan ix_coords_and_user_id
bahkan jika mereka tidak memfilter di user_id
, tetapi akan lebih lambat dari ix_coords
. Menjaga keduanya akan membuat INSERT
dan UPDATE
pelambatan bahkan lebih buruk.
Lihat btree-gist
(Dihapus oleh edit ke pertanyaan yang mengubah pertanyaan sepenuhnya; ketika ditulis, pengguna memiliki indeks multikolom, mereka sekarang telah dipecah menjadi dua yang terpisah ):
Anda sepertinya tidak memfilter atau mengurutkan user_id
, hanya create_date
. Pg tidak akan (tidak bisa?) hanya menggunakan istilah kedua dari indeks multi-kolom seperti (user_id, create_date)
, itu perlu menggunakan item pertama juga.
Jika Anda ingin mengindeks create_date
, buat indeks terpisah untuknya. Jika Anda menggunakan dan memerlukan (user_id, create_date)
indeks dan biasanya tidak hanya menggunakan user_id
sendiri, lihat apakah Anda dapat membalikkan urutan kolom. Buat dua indeks independen secara bergantian, (user_id)
dan (create_date)
. Ketika kedua kolom diperlukan, Pg dapat menggabungkan dua indeks independen menggunakan pemindaian indeks bitmap.