Mengekstrak komentar saya menjadi jawaban:pencarian indeks di sini sangat cepat -- semua waktu dihabiskan untuk mengambil baris yang sebenarnya. 23 detik / 7871 baris =2,9 milidetik per baris, yang masuk akal untuk mengambil data yang tersebar di seluruh subsistem disk. Pencarian lambat; Anda dapat a) memasukkan dataset Anda ke dalam RAM, b) membeli SSD, atau c) mengatur data Anda sebelumnya untuk meminimalkan pencarian.
PostgreSQL 9.2 memiliki fitur yang disebut pemindaian hanya indeks yang memungkinkannya (biasanya) menjawab pertanyaan tanpa mengakses tabel. Anda dapat menggabungkan ini dengan btree
indeks properti secara otomatis mempertahankan pesanan untuk membuat kueri ini cepat. Anda menyebutkan int1
, int2
, dan dua float:
CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);
SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index
Perhatikan juga bahwa ini tidak secara ajaib menghapus pencarian disk, itu hanya memindahkannya dari waktu kueri ke waktu penyisipan. Ini juga menghabiskan ruang penyimpanan Anda, karena Anda menduplikasi data. Namun, ini mungkin trade-off yang Anda inginkan.