consulta de paginación eficiente de Oracle SQL
No hay mucha diferencia entre estas dos declaraciones de consulta, pero el rendimiento es muy diferente. Después de las pruebas, el primero tiene el mejor rendimiento y casi no se ve afectado a medida que aumenta el número. En el segundo caso, a medida que aumenta la cantidad de datos, la velocidad de consulta se vuelve cada vez más lenta. En el caso de una tabla con 2 millones de datos, la primera consulta tarda básicamente 0,3 segundos y la segunda consulta tarda más de 1,3 segundos. Una consulta estuvo equivocada por un segundo completo. No subestimes este segundo. Cuando se consultan 1000 piezas de 2 millones de piezas de datos cada vez, se necesitan 2000 = 33 minutos para completar la consulta.
El propósito de la paginación es controlar el tamaño del conjunto de resultados de salida y devolver los resultados como lo más rápido posible. En la declaración de consulta de paginación anterior, esta consideración se refleja principalmente en la oración WHERE ROWNUM <= 20.
Esto se debe a que en el modo de optimización CBO, Oracle puede insertar las condiciones de la consulta externa en la consulta interna para mejorar la eficiencia de ejecución de la consulta interna.
Para un orden correcto por declaraciones, Oracle puede insertar la condición de consulta de segundo nivel WHERE ROWNUM <= 20 en la consulta interna, una vez que el resultado de la consulta de Oracle excede la condición de restricción ROWNUM. , La consulta finaliza y se devuelven los resultados
Hay una declaración de orden por para el error ya que las condiciones de consulta donde b.rowno >= 11 y b.rowno <= 20 existen en la tercera capa. de la consulta, Oracle no puede Las condiciones de consulta de tercer nivel se llevan al nivel más interno (incluso si se empuja al nivel más interno, no tiene sentido, porque la consulta más interna no sabe qué representa b.rowno). Por lo tanto, para esta declaración, la capa más interna de Oracle devuelve todos los datos que cumplen las condiciones a la capa intermedia, y la capa intermedia devuelve todos los datos a la capa más externa. El filtrado de datos se completa en la capa más externa, lo que obviamente es mucho menos eficiente que la primera consulta.
La consulta analizada anteriormente no es solo una consulta simple para una sola tabla, sino que también es efectiva cuando la consulta más interna es una consulta conjunta compleja de varias tablas o la consulta más interna contiene clasificación.