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.