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 Capítulo 1. 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

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Bluesky or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

Acerca del autor

Foto de Markus Winand

Markus Winand es defensor del resurgimiento del SQL. Su misión es la de presentar a los desarrolladores la evolución de SQL en el siglo XXI. Es posible contratar a Markus según disponibilidad o como orador o consultor en winand.at.

Adquiere tu libro

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra ahora
(libro de bolsillo y/o PDF)

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

Entrar en contacto con Markus

Suscríbete a listas de correoRSS FeedMarkus Winand en LinkedInMarkus Winand en XINGMarkus Winand en TwitterMarkus Winand en Bluesky
Copyright 2017-2025 Martin LE TARNEC, Markus Winand. All righs reserved.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacidad y RGPD