Trích xuất nhận xét của tôi thành một câu trả lời:tra cứu chỉ mục ở đây rất nhanh - tất cả thời gian đã dành để truy xuất các hàng thực tế. 23 giây / 7871 hàng =2,9 mili giây mỗi hàng, hợp lý để truy xuất dữ liệu nằm rải rác trên hệ thống con đĩa. Tìm kiếm rất chậm; bạn có thể a) lắp tập dữ liệu của mình vào RAM, b) mua SSD hoặc c) sắp xếp dữ liệu của bạn trước thời hạn để giảm thiểu các lần tìm kiếm.
PostgreSQL 9.2 có một tính năng gọi là quét chỉ chỉ mục cho phép nó (thường) trả lời các truy vấn mà không cần truy cập vào bảng. Bạn có thể kết hợp điều này với btree
thuộc tính chỉ mục của việc tự động duy trì trật tự để làm cho truy vấn này nhanh chóng. Bạn đề cập đến int1
, int2
và hai phao:
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
Cũng lưu ý rằng điều này không xóa một cách kỳ diệu các tìm kiếm trên đĩa, nó chỉ di chuyển chúng từ thời gian truy vấn sang thời gian chèn. Nó cũng làm bạn tốn dung lượng lưu trữ vì bạn đang sao chép dữ liệu. Tuy nhiên, đây có lẽ là sự đánh đổi mà bạn muốn.