text_pattern_ops gibi eşleştirme modeli için operatör sınıfı oluşturun ('1' < '2' < '10' < '11' vs), benim yeni operatörler #<#
kullanarak, #<=#
, #>#
ve #>=#
. Ben benim yeni text_natsort_ops
kullanarak bir dizin oluştururkenBen doğal sırası kullanılır metin veri türü üzerinde kendi karşılaştırma operatörlerini yarattı
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);
Ancak, bu sorgularda kullanılmaz:
Şimdi bu gibi üzerlerinde bir dizin oluşturmak mümkün bir operatör sınıfa yerleştirmek like
dahil, text_pattern_ops
kullanıldığında yapılır.
nasıl operatör sınıfı dizinimi kullanmak like
izin vermek beyan edersiniz?
GÜNCELLEME:
yukarıdaki iş gibi görünüyor, bu yüzden soru geçersiz.
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
ve ben de çok daha hızlı iş gibi görünüyor, çünkü planlayıcısı seçtikleri text_pattern_ops, kullanarak başka indeksi vardı: My asıl sorun ben gibi bir sorgu kullanılan olmasıydı. order by ... using
sadece indeksi faydalı olacaktır benim yeni op kullanarak Ancak, ... diğer endeks çok fazla sonuç verir ve I endeksi taramasına kullanılabilir olması limiti şartı gerekiyor.
Güncelleştirmenizi yanıt olarak göndermelisiniz, bu nedenle bu Q "yanıtsız" olarak görünmez. –