de Martin LE TARNEC.

Ordenar y agrupar


Ordenar es una operación intensiva en recursos. Se necesita una buena cantidad de tiempo CPU, pero el mayor problema es que la base de datos debe guardar en memoria temporalmente los resultados. Después de todo, una operación de ordenación debe leer completa la entrada antes de poder generar la primera salida. Las operaciones de ordenación pueden ejecutarse de forma encadenada; eso puede llegar a ser un problema para grandes conjuntos de datos.

Un índice provee una representación de los datos indexados: este fundamento ya se explicó en el . Se puede también decir que un índice almacena los datos de una manera preordenada. De hecho, el índice ordena según se definió durante la creación del índice con la cláusula order by. Por lo tanto, no debería sorprender saber que se puedan utilizar los índices para prescindir de la operación de ordenación ante una una cláusula order by.

Irónicamente, un INDEX RANGE SCAN llega también a ser ineficiente para grandes conjuntos de datos, especialmente cuando le sigue un acceso a la tabla. Eso puede invalidar el ahorro de evitar las operaciones de ordenación. En este caso, un FULL TABLE SCAN con una operación explícita de ordenación podría ser aun más rápido. Nuevamente, es tarea del optimizador evaluar los diferentes planes de ejecución y seleccionar el mejor.

La ejecución de un order by indexado no solamente ahorra el esfuerzo de ordenación sino que también es capaz de devolver los primeros registros sin haber procesado todos los datos de entrada. El comando order by se ejecuta de una forma encadenada (en inglés, pipeline). El Capítulo 7, “Resultados parciales, explica cómo explotar la ejecución encadenada para implementar las sentencias de paginación de manera eficiente. Eso hace el order by en pipeline tan importante que me refiero a él como el tercer poder de la indexación.

Nota

El recorrido del B-Tree es el primer poder de la indexación.

La agrupación es el segundo poder de la indexación.

Order by en pipeline es el tercer poder de la indexación.

Este capítulo explica cómo usar un índice para la ejecución encadenada de un order by. Con este propósito, se debe prestar mucha atención a las interacciones del filtro where y también a los modificadores ASC y DESC. El capítulo concluye aplicando esas técnicas sobre las cláusulas group by.

Si te gusta mi manera de explicar, te encantará mi libro.

Contenido

  1. Indexar Order By — Interacciones de los filtros where

  2. ASC/DESC y NULL FIRST/LAST — cambiando el orden del índice

  3. Indexar Group By — Agregando group by

Previous pageNext page

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia