Tôi đã tạo toán tử so sánh văn bản có sử dụng thứ tự tự nhiên ('1' < '2' < '10' < '11' vv), sử dụng toán tử mới #<#
, #<=#
, #>#
và #>=#
.Tạo lớp toán tử cho đối sánh mẫu như text_pattern_ops
Bây giờ tôi đặt chúng vào một lớp học hành để có thể tạo ra một chỉ mục trên họ, như thế này:
CREATE OPERATOR CLASS text_natsort_ops
FOR TYPE text USING btree AS
OPERATOR 1 #<#,
OPERATOR 2 #<=#,
OPERATOR 3 =,
OPERATOR 4 #>=#,
OPERATOR 5 #>#,
FUNCTION 1 bttext_natsort_cmp(text, text);
Tuy nhiên, khi tôi tạo ra một chỉ số sử dụng tôi mới text_natsort_ops
, điều này không được sử dụng trong các truy vấn liên quan đến like
vì nó được thực hiện khi sử dụng text_pattern_ops
.
Làm cách nào để khai báo lớp nhà điều hành của mình để cho phép like
sử dụng chỉ mục của tôi?
UPDATE:
này dường như trên để làm việc, vì vậy câu hỏi là không hợp lệ. Vấn đề thực sự của tôi là tôi sử dụng một truy vấn như:
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
và tôi cũng đã có chỉ số khác sử dụng text_pattern_ops, được chọn bằng các kế hoạch bởi vì nó dường như làm việc nhanh hơn nhiều. Tuy nhiên, vì chỉ số order by ... using
chỉ sử dụng các ops mới của tôi sẽ hữu ích ... chỉ số khác trả về quá nhiều kết quả, và tôi cần mệnh đề giới hạn để có sẵn cho việc quét chỉ mục.
Bạn nên đăng cập nhật của mình dưới dạng câu trả lời, vì vậy, câu hỏi này không ẩn chứa thành "chưa được trả lời". –