Hiệu suất của truy vấn với một điều kiện phạm vi và thứ tự của


8

Chúng tôi có bảng sau (bằng SQLite trên Android) có cấu trúc cây (mô hình Nested Set) của các từ và tần số của chúng:

lexikon
-------
_id   integer  PRIMARY KEY
word  text
frequency integer
lset  integer  UNIQUE KEY
rset  integer  UNIQUE KEY

Và truy vấn:

SELECT word
FROM lexikon
WHERE lset BETWEEN @Low AND @High
ORDER BY frequency DESC
LIMIT @N

Tôi cho rằng một chỉ số bao phủ trên (lset, frequency, word)sẽ hữu ích nhưng tôi cảm thấy nó có thể hoạt động không tốt nếu có quá nhiều lsetgiá trị trong (@High, @Low)phạm vi.

(frequency DESC)Đôi khi một chỉ mục đơn giản cũng có thể đủ, khi một tìm kiếm sử dụng chỉ mục đó mang lại sớm các @Nhàng khớp với điều kiện phạm vi.

Nhưng dường như hiệu suất phụ thuộc rất nhiều vào các giá trị tham số.

Có cách nào để làm cho nó hoạt động nhanh, bất kể phạm vi (@Low, @High)rộng hay hẹp và bất kể các từ tần số cao nhất có may mắn trong phạm vi được chọn (hẹp) không?


bạn có thể cung cấp một số thông tin về phân phối các giá trị trong frequencycột không?
Jack nói hãy thử topanswers.xyz

Câu trả lời:


1

Tôi muốn nói rằng hãy thử chỉ số bao trùm (lset, tần số, từ), nhưng bạn không cung cấp nhiều thông tin. Vui lòng gửi bảng của bạn có bao nhiêu hàng, bao nhiêu byte, bao nhiêu hàng tối đa bạn mong đợi để lấy lại từ truy vấn của mình, tính chính xác của dữ liệu của bạn là gì?


Bảng có khoảng 100K hàng. Truy vấn không có LIMITsẽ trả về một vài nghìn hàng trong một số trường hợp và ít hơn 10 hàng trong các trường hợp khác.
ypercubeᵀᴹ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.