Red de conocimiento de abogados - Derecho de sociedades - consulta de paginación eficiente de Oracle SQL

consulta de paginación eficiente de Oracle SQL

Debido a que una función necesita leer todos los datos de una tabla grande para el procesamiento comercial, definitivamente no es posible encontrar todos los datos a la vez. Requiere que el programa procese consultas de paginación. La prueba de simulación de una tabla con 2 millones de datos. El volumen descubrió que lleva mucho tiempo y no es un negocio. El procesamiento requiere mucho tiempo y las consultas de paginación consumen mucho tiempo. Es posible que todos sepan que la consulta de paginación de Oracle usa rownum, y la mayoría de las empresas tienen este tipo de paginación encapsulada en la capa inferior, por lo que generalmente no todos le prestan atención cuando la usan (después de este tiempo, le presté especial atención y nuestra empresa simplemente lo usa) Incorrecto)

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.