Tôi có một danh sách các tiền tố số điện thoại được xác định cho số lượng lớn các vùng (trong truy vấn được xác định bởi gvcode và cgi). Tôi cần tìm một tiền tố dài nhất phù hợp với số lượng PHONE_NR đã cho.Cách nhanh nhất để tìm kiếm tiền tố dài nhất trong ORACLE
Tôi sử dụng mệnh đề LIKE ngược trên các chữ số trường (có chứa tiền tố ở dạng + 48%, + 49%, + 1%, + 1232% v.v.).
Vì vậy, tôi không thể sử dụng chỉ mục bình thường trên trường đó.
Tôi đã xoay sở để cải thiện đáng kể bằng cách sử dụng IOT trên trường gvcode và cgi (là một phần (hai cột đầu tiên) của khóa chính). Tôi cũng xem xét một số chỉ mục văn bản oracle nhưng không thể tìm thấy một trong đó sẽ phù hợp với đầu vào dài hơn với tiền tố ngắn hơn trong bảng.
Có cách nào khác để thực hiện tìm kiếm nhanh hơn phương pháp này hay không.
Đây là truy vấn cung cấp danh sách tất cả các tiền tố phù hợp (sau đó tôi sắp xếp nó theo chiều dài chữ số).
select t.gvcode, t.digits
from NUMBERS t
where
t.gvcode=ZONE_SET_CODE
and t.cgi=cgi_f
and (PHONE_NR like t.digits)
order by length(digits) desc
Có thể nếu bạn tạo chỉ mục dựa trên hàm trên 'substr (chữ số, 2, độ dài (chữ số) -1)' và sau đó thêm vào truy vấn của bạn ở đó mệnh đề điều kiện khác 'và substr (chữ số, 2, length (digit) -1) <= PHONE_NR' bạn có thể thấy một số cải thiện trong một số trường hợp –
Nên là 'và substr (chữ số, 1, chiều dài (chữ số) -1) <= PHONE_NR' (không cần phải xóa '+') –