0Pricing
Coding Interview Prep · Lección

Orden de las columnas en índices compuestos

La regla del prefijo más a la izquierda y cómo elegir el orden de columnas adecuado para una carga de trabajo.

Orden de las columnas en índices compuestos es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.

La cuestión de los índices compuestos

Una vez que puede explicar un índice de una sola columna, los entrevistadores suben el nivel: 'Consulta por customer_id y order_date a la vez. ¿Cómo crearía el índice?' La respuesta esperada es un índice compuesto (de varias columnas) y una justificación del orden de las columnas.

Esta lección enseña la regla del prefijo situado más a la izquierda, la idea que explica casi cualquier pregunta sobre índices compuestos que le puedan hacer.

Qué es un índice compuesto

Un índice compuesto indexa varias columnas como una tupla ordenada. Las entradas se ordenan primero por la primera columna, después por la segunda para los valores iguales, y así sucesivamente, exactamente como una guía telefónica ordenada por apellido y luego por nombre.

El orden es fundamental, porque la prioridad de ordenación sigue el orden de las columnas que declare.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

La regla del prefijo situado más a la izquierda

La regla fundamental es la siguiente: un índice compuesto sobre (A, B, C) puede utilizarse en consultas que filtren por un prefijo situado más a la izquierda de esas columnas:

  • Solo A, sí
  • A, B, sí
  • A, B, C, sí
  • Solo B, no
  • B, C, no

Piense en la guía telefónica: puede encontrar a todas las personas cuyo apellido sea 'Smith', pero no puede encontrar de forma eficiente a todas las personas cuyo nombre sea 'John', independientemente del apellido, porque el libro no está ordenado de esa manera.

Ejemplo resuelto: coincidencias con el prefijo

Con el índice sobre (customer_id, order_date), estas consultas pueden utilizarlo porque comienzan por customer_id:

La primera utiliza únicamente la columna inicial. La segunda utiliza ambas: primero acota por customer_id y después busca dentro de las entradas de ese cliente, ordenadas por fecha.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Ejemplo resuelto: cuando no coincide el prefijo

Esta consulta filtra únicamente por la segunda columna, por lo que, en general, el índice sobre (customer_id, order_date) no puede dirigir la búsqueda: las entradas no están ordenadas globalmente por order_date.

Si filtrar solo por order_date es un patrón habitual, necesita un índice independiente que comience por order_date.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

Igualdad antes que rango

Una precisión propia del nivel sénior: coloque las columnas utilizadas con igualdad (=) antes de las columnas utilizadas con un rango (<, >, BETWEEN). Una vez que el índice llega a una columna de rango, ya no puede utilizar las columnas posteriores para acotar la búsqueda.

Para una consulta como status = 'paid' AND created_at > ?, el orden correcto es (status, created_at), no el inverso.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

Cómo elegir la columna inicial

¿Cómo se decide qué columna debe ir primero? Los entrevistadores esperan una respuesta basada en la carga de trabajo:

  • Coloque primero la columna que aparece en el mayor número de consultas, especialmente como filtro de igualdad.
  • Prefiera una columna con alta selectividad (muchos valores distintos) para que el primer paso elimine el mayor número de filas.
  • Tenga en cuenta las necesidades de ORDER BY: hacer coincidir el orden del índice puede evitar una ordenación.

La columna inicial es la que realiza el trabajo de filtrado más importante en el conjunto real de consultas.

El índice compuesto también ayuda a ordenar

Un índice compuesto también sirve para ORDER BY sobre un prefijo situado más a la izquierda. Como las entradas están ordenadas primero por customer_id y después por order_date, una consulta que obtiene los pedidos de un cliente ordenados por fecha es prácticamente gratis: no necesita una ordenación independiente.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

No acumule índices redundantes

Los candidatos suelen crear demasiados índices. Si ya tiene (customer_id, order_date), un índice independiente únicamente sobre (customer_id) suele ser redundante: el índice compuesto ya cubre las consultas sobre la columna inicial.

Cada índice adicional consume almacenamiento y ralentiza las escrituras, por lo que el objetivo es disponer del conjunto mínimo de índices que cubra sus patrones de consulta, no de un índice por columna.

Cómo demostrarlo con EXPLAIN

Como siempre, confirme la decisión del planificador. Después de crear un índice compuesto, ejecute EXPLAIN y compruebe si aparece como un Index Scan y cuántas filas estima.

Si una consulta que no coincide con el prefijo vuelve a un escaneo secuencial, esa es la prueba de que el orden de las columnas no se adapta a la carga de trabajo; es exactamente lo que explicaría al entrevistador.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Cómo expresarlo en la entrevista

Una frase resumida y precisa:

'Un índice compuesto se ordena por sus columnas de izquierda a derecha, por lo que puede servir cualquier prefijo situado más a la izquierda de esas columnas, pero no un subconjunto final. Coloco primero la columna más utilizada para filtrar y con mayor selectividad, pongo los predicados de igualdad antes que los de rango y, cuando es posible, hago coincidir ORDER BY; después, lo verifico con EXPLAIN.'

Comprobación rápida

Aplique la regla del prefijo más a la izquierda.

Repaso: orden de un índice compuesto

Ideas clave:

  • Un índice compuesto se ordena de izquierda a derecha; solo sirve para un prefijo más a la izquierda de sus columnas.
  • Coloque primero la columna más consultada y de alta selectividad.
  • Coloque las columnas de igualdad antes que las columnas de rango.
  • Un prefijo coincidente también puede satisfacer ORDER BY sin ordenar.
  • Evite los índices de una sola columna redundantes que ya cubre un índice compuesto y verifíquelo con EXPLAIN.

A continuación: índices de cobertura que eliminan por completo el acceso al heap.

Preguntas frecuentes

¿La lección «Orden de las columnas en índices compuestos» es gratis?

Sí — el texto completo de «Orden de las columnas en índices compuestos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Orden de las columnas en índices compuestos»?

La regla del prefijo más a la izquierda y cómo elegir el orden de columnas adecuado para una carga de trabajo. Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Coding Interview Prep?

No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Orden de las columnas en índices compuestos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?

Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Índices B-Tree y cómo ayudan
  2. Orden de las columnas en índices compuestos
  3. Índices de cobertura y escaneos Index-Only
  4. Cuándo perjudican los índices: escrituras y selectividad
← Volver a Coding Interview Prep