Nói rằng tôi có một số SELECT
tuyên bố:Tìm số hàng trong một loại dựa trên id hàng, sau đó tìm các nước láng giềng
SELECT id, name FROM people
ORDER BY name ASC;
Tôi có một vài triệu hàng trong bảng people
và mệnh đề ORDER BY
có thể được nhiều phức tạp hơn những gì tôi đã hiển thị ở đây (có thể hoạt động trên một tá cột).
Tôi chỉ lấy một tập nhỏ các hàng (nói các hàng 1..11) để hiển thị chúng trong giao diện người dùng. Bây giờ, tôi muốn giải quyết các vấn đề sau:
- Tìm số hàng có số
id
nhất định. - Hiển thị 5 mục trước và 5 mục sau hàng có
id
nhất định.
Vấn đề 2 rất dễ giải quyết khi tôi đã giải quyết vấn đề 1, sau đó tôi có thể sử dụng thứ gì đó như thế này nếu tôi biết mục tôi đang tìm có số hàng 1000
trong tập hợp kết quả được sắp xếp (đây là Firebird phương ngữ SQL):
SELECT id, name FROM people
ORDER BY name ASC
ROWS 995 TO 1005;
tôi cũng biết rằng tôi có thể tìm ra rank của một hàng bằng cách đếm tất cả các hàng mà đến trước người tôi đang tìm kiếm, nhưng điều này có thể dẫn đến WHERE
khoản rất dài với tấn OR
và AND
trong điều kiện. Và tôi phải làm điều này nhiều lần. Với dữ liệu thử nghiệm của tôi, điều này mất hàng trăm mili giây, ngay cả khi sử dụng các cột được lập chỉ mục đúng cách, quá chậm.
Có một số phương tiện để đạt được điều này bằng cách sử dụng một số tính năng SQL: 2003 (chẳng hạn như row_number
được hỗ trợ trong Firebird 3.0)? Tôi là không có cách nào một guru SQL và tôi cần một số con trỏ ở đây. Tôi có thể tạo chế độ xem được lưu trong bộ nhớ cache trong đó kết quả sẽ bao gồm chỉ mục xếp hạng/xếp hạng hàng/dày đặc không?
quá khó để trả lời mà không có thông tin về loại giao diện người dùng. Web? Máy tính để bàn? Dòng lệnh? Giao diện người dùng thoại ;-) – rstrelba
Tôi đang hiển thị danh sách những người trong ứng dụng dành cho máy tính để bàn; kể từ khi bộ sưu tập là rất lớn, tôi chỉ lấy hàng cho những người phù hợp với chế độ xem của danh sách. Người dùng có một thanh cuộn cho phép cô di chuyển đến bất kỳ điểm nào trong danh sách và làm cho nó làm mới nội dung của nó như thể nó thực sự được lấp đầy với hàng triệu hàng. –
có bao nhiêu tham số bổ sung trong bộ lọc của chế độ xem? – rstrelba