Để kiểm tra bình đẳng đơn giản (=
), chỉ mục B-Tree trên cột varchar
hoặc text
thật đơn giản và là lựa chọn tốt nhất. Nó chắc chắn giúp hiệu suất rất nhiều.
Tất nhiên, chỉ mục B-Tree trên đơn giản integer
hoạt động tốt hơn. Để bắt đầu, so sánh các giá trị đơn giản integer
nhanh hơn một chút. Nhưng quan trọng hơn, hiệu suất cũng là một chức năng của kích thước của chỉ mục. Cột lớn hơn có nghĩa là có ít hàng hơn trên mỗi trang dữ liệu, nghĩa là bạn phải đọc nhiều trang hơn ...
Vì số HomeAddress
hầu như không phải là duy nhất, nó không phải là khóa chính tự nhiên tốt. Tôi thực sự khuyên bạn nên sử dụng một khóa chính thay thế chính thay thế. Một serial
column là sự lựa chọn hiển nhiên cho điều đó. Mục đích duy nhất của nó là có một khóa chính nhanh, đơn giản để làm việc.
Nếu bạn có các bảng khác tham chiếu bảng đã nói, điều này trở nên hiệu quả hơn. Thay vì sao chép chuỗi dài cho cột khóa ngoài, bạn chỉ cần 4 byte cho cột số nguyên. Và bạn không cần phải cập nhật quá nhiều, vì địa chỉ bị ràng buộc thay đổi, trong khi đó, một pk thay thế có thể giữ nguyên (nhưng dĩ nhiên không phải tất nhiên).
bảng bạn có thể trông như thế này:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Điều này dẫn đến hai chỉ số B-Tree. Chỉ mục duy nhất trên resident_id
và chỉ mục đơn giản trên address
.
More about indexes in the manual.
Postgres cung cấp nhiều tùy chọn - nhưng bạn không cần thêm bất kỳ tùy chọn nào cho trường hợp đơn giản này.
Nguồn
2013-06-04 23:02:39
Cảm ơn @Denis đã chỉ ra rằng ràng buộc duy nhất sẽ thiết lập chỉ mục tự động. – Hao
Theo hiệu suất, có một hướng dẫn luôn áp dụng: kiểm tra nó. Không thể nhận được tất cả các giai đoạn của bạn từ mô tả mơ hồ như vậy, khi bạn hỏi về tốc độ, hãy kiểm tra những gì nhanh nhất cho bạn. Có những trường hợp phương pháp tiếp cận tối ưu về mặt lý thuyết nhanh hơn cho dữ liệu bạn thường xử lý. – omikron