Không có cách nào .
Chỉ mục yêu cầu IMMUTABLE
biểu thức. Kết quả của biểu thức của bạn phụ thuộc vào chuỗi đầu vào. Tôi không thấy cách nào khác ngoài việc đánh giá biểu thức cho mọi hàng, nghĩa là quét tuần tự.
Câu trả lời liên quan với nhiều chi tiết hơn cho IMMUTABLE
góc:
Chỉ là không có giải pháp thay thế cho trường hợp của bạn, điều này là không thể Chỉ mục. Chỉ mục cần lưu trữ các giá trị không đổi trong các bộ giá trị của nó, chỉ số này không có sẵn vì giá trị kết quả cho mọi hàng được tính dựa trên đầu vào. Và bạn không thể chuyển đổi đầu vào mà không nhìn vào giá trị cột.
Việc sử dụng chỉ mục Postgres bị ràng buộc với các toán tử và chỉ lập chỉ mục trên các biểu thức left của toán tử có thể được sử dụng (do các hạn chế lôgic giống nhau). Thêm:
Nhiều toán tử xác định COMMUTATOR
cho phép người lập kế hoạch / tối ưu hóa truy vấn lật các biểu thức đã lập chỉ mục sang bên trái. Ví dụ đơn giản:Dấu phẩy của =
là =
. dấu phẩy của >
là <
và ngược lại. Tài liệu:
Toán tử đối sánh biểu thức chính quy ~
không có cổ góp, một lần nữa, bởi vì điều đó là không thể. Hãy tự mình xem:
SELECT oprname, oprright::regtype, oprleft::regtype, oprcom
FROM pg_operator
WHERE oprname = '~'
AND 'text'::regtype IN (oprright, oprleft);
oprname | oprright | oprleft | oprcom
---------+----------+-----------+------------
~ | text | name | 0
~ | text | text | 0
~ | text | character | 0
~ | text | citext | 0
Và tham khảo hướng dẫn tại đây:
Tôi đã thử trước đây và phải chấp nhận điều đó không thể đối với hiệu trưởng .