decir que tengo algo de SELECT
declaración:encontrar en una ordenación basada en el corredor de Identificación, y luego encontrar sus vecinos
SELECT id, name FROM people
ORDER BY name ASC;
que tienen unos pocos millones de filas de la tabla people
y la cláusula ORDER BY
puede ser mucho más complejo que lo que he mostrado aquí (posiblemente operando en una docena de columnas).
Recupero solo un pequeño subconjunto de las filas (digamos las filas 1..11) para mostrarlas en la interfaz de usuario. Ahora, me gustaría resolver los siguientes problemas:
- Encuentra el número de una fila con un dado
id
. - Muestra los 5 elementos antes y los 5 elementos después de una fila con un
id
dado.
Problema 2 es fácil de resolver de una vez he resuelto el problema 1, ya que entonces puedo usar algo como esto si sé que el tema que estaba buscando tiene fila de números 1000
en el conjunto de resultados ordenados (este es el Firebird lenguaje SQL):
SELECT id, name FROM people
ORDER BY name ASC
ROWS 995 TO 1005;
también sé que puedo encontrar el rank de una fila contando todas las filas, que se presentan ante el que estoy buscando, pero esto puede llevar a muy largas WHERE
cláusulas con toneladas de OR
y AND
en la condición. Y tengo que hacer esto varias veces. Con mis datos de prueba, esto lleva cientos de milisegundos, incluso cuando se utilizan columnas correctamente indexadas, lo cual es demasiado lento.
¿Hay alguna forma de lograr esto utilizando algunas características SQL 2003 (como row_number
compatibles con Firebird 3.0)? De ninguna manera soy un gurú de SQL y necesito algunos consejos aquí. ¿Podría crear una vista en caché donde el resultado incluiría un índice de rango/fila densa/fila?
demasiado difícil de responder sin información sobre el tipo de IU. ¿Web? ¿Escritorio? ¿Línea de comando? Voice UI ;-) – rstrelba
Estoy mostrando una lista de personas en una aplicación de escritorio; dado que la colección es enorme, solo busco las filas de las personas que encajan en la ventana gráfica de la lista. El usuario tiene una barra de desplazamiento que le permite moverse a cualquier punto de la lista y hacer que actualice su contenido como si realmente estuviera lleno de millones de filas. –
¿cuántos parámetros adicionales en el filtro de la ventana gráfica? – rstrelba