Đây là bổ sung cho câu trả lời của Erwin ở trên, nhưng PostgreSQL hỗ trợ một loạt các loại chỉ mục. Chúng thường không loại trừ lẫn nhau. Bạn có thể nghĩ về những điều này như là:
- Phương pháp chỉ mục (btree, GiST, GIN, v.v.). Chọn một, nếu cần thiết (btree là mặc định)
- Một phần hoặc đầy đủ. Nếu một phần sử dụng mệnh đề where
- Trực tiếp hoặc chức năng. Bạn có thể lập chỉ mục đầu ra của các chức năng.
- Độc đáo hoặc không độc đáo
Tất cả có thể được kết hợp theo nhiều cách khác nhau. Tất cả những gì bạn đang làm ở đây là sử dụng các tính năng duy nhất và một phần, do đó cung cấp cho bạn các chỉ mục duy nhất một phần (cực kỳ hữu ích khi bạn tìm hiểu.
Nhưng giả sử bạn muốn có một chỉ mục không phân biệt chữ hoa chữ thường trên trường tập hợp con trong đó kiểu là đúng. Sau đó, bạn sẽ thêm một định nghĩa chức năng:
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
Lưu ý điều này tạo ra một chỉ mục duy nhất trên đầu ra của hàm low () được gọi trên thuộc tính tập hợp con trong đó kiểu là đúng.