Orivel Orivel
Abrir menú

Enseñar índices de base de datos a un desarrollador backend junior

Compara las respuestas de los modelos para esta tarea de benchmark de Explicación y revisa puntuaciones, comentarios y ejemplos relacionados.

Inicia sesión o regístrate para usar me gusta y favoritos. Registrarse

X f L

Índice

Resumen de la tarea

Géneros de comparación

Explicación

Modelo creador de la tarea

Modelos participantes

Modelos evaluadores

Enunciado de la tarea

Escribe una explicación orientada a la enseñanza para un desarrollador backend junior que conoce la sintaxis básica de SQL SELECT, WHERE y JOIN pero que nunca ha diseñado índices de base de datos de forma intencional. Explica qué es un índice de base de datos, cómo puede acelerar lecturas, por qué puede ralentizar escrituras y usar almacenamiento adicional, y cómo se usa a alto nivel un índice B-tree común. Incluye una explicación práctica de selectividad, índices compuestos, la idea del prefijo más a la izquierda...

Mostrar más

Escribe una explicación orientada a la enseñanza para un desarrollador backend junior que conoce la sintaxis básica de SQL SELECT, WHERE y JOIN pero que nunca ha diseñado índices de base de datos de forma intencional. Explica qué es un índice de base de datos, cómo puede acelerar lecturas, por qué puede ralentizar escrituras y usar almacenamiento adicional, y cómo se usa a alto nivel un índice B-tree común. Incluye una explicación práctica de selectividad, índices compuestos, la idea del prefijo más a la izquierda (leftmost-prefix) y situaciones en las que un índice puede no ayudar. Usa una analogía simple, pero también explica el comportamiento real de la base de datos directamente. Incluye dos ejemplos SQL pequeños que muestren una elección de índice útil y una elección de índice menos útil o problemática. Termina con una lista de comprobación práctica y corta que el desarrollador pueda usar al decidir si añadir un índice.

Información complementaria

Asume una base de datos relacional genérica como PostgreSQL, MySQL o SQLite. Evita depender de sintaxis específica del proveedor o de detalles avanzados internos de la base de datos más allá de lo necesario para una comprensión práctica.

Política de evaluación

Una buena respuesta debe ser precisa, clara y adecuada para un desarrollador backend junior. Debe explicar los índices como estructuras de datos separadas que ayudan a la base de datos a encontrar filas sin escanearlo todo, describir los compromisos entre lecturas y escrituras, y cubrir correctamente el comportamiento de B-tree a alto nivel sin complicarlo en exceso. Debe hacer que sean comprensibles la selectividad, los índices compuestos y la idea del prefijo más a la izquierda mediante ejemplos prácticos. Los ej...

Mostrar más

Una buena respuesta debe ser precisa, clara y adecuada para un desarrollador backend junior. Debe explicar los índices como estructuras de datos separadas que ayudan a la base de datos a encontrar filas sin escanearlo todo, describir los compromisos entre lecturas y escrituras, y cubrir correctamente el comportamiento de B-tree a alto nivel sin complicarlo en exceso. Debe hacer que sean comprensibles la selectividad, los índices compuestos y la idea del prefijo más a la izquierda mediante ejemplos prácticos. Los ejemplos SQL deben ser pequeños, coherentes y relevantes, y la respuesta debe evitar reglas engañosas como indexar siempre todas las columnas o asumir que un índice siempre se utilizará. La lista de comprobación final debe ser accionable y conectar las decisiones de indexación con los patrones reales de consulta, la distribución de los datos y los costes de mantenimiento.

Respuestas

Comprensión de los índices de bases de datos: una guía práctica

Qué es un índice

Un índice de base de datos es una estructura de datos separada que la base de datos mantiene junto a una tabla. Almacena los valores de una o más columnas en un formato ordenado y buscable, junto con punteros a las filas reales. La tabla en sí almacena sus datos; el índice es una estructura adicional cuyo único propósito es ayudar a la base de datos a encontrar filas más rápido.

Aquí hay una analogía, y es la única que necesitará: un índice es como el índice al final de un libro de texto. Si desea todas las páginas que mencionan "...

Mostrar respuesta completa

Comprensión de los índices de bases de datos: una guía práctica

Qué es un índice

Un índice de base de datos es una estructura de datos separada que la base de datos mantiene junto a una tabla. Almacena los valores de una o más columnas en un formato ordenado y buscable, junto con punteros a las filas reales. La tabla en sí almacena sus datos; el índice es una estructura adicional cuyo único propósito es ayudar a la base de datos a encontrar filas más rápido.

Aquí hay una analogía, y es la única que necesitará: un índice es como el índice al final de un libro de texto. Si desea todas las páginas que mencionan "transacciones", no lee el libro completo página por página; busca "transacciones" en el índice ordenado alfabéticamente, obtiene una lista corta de números de página y salta directamente a ellas. Sin ese índice, su única opción es escanear cada página. Una base de datos se enfrenta exactamente a la misma elección: usar un índice para saltar a las filas coincidentes o escanear toda la tabla.

Ahora el comportamiento real, sin la analogía. Cuando ejecuta una consulta como SELECT * FROM orders WHERE customer_id = 42, la base de datos tiene dos estrategias básicas. Un escaneo completo de la tabla lee cada fila y verifica la condición, lo que cuesta tiempo proporcional al tamaño de la tabla. Una búsqueda de índice, en cambio, busca en la estructura de índice ordenada customer_id = 42, encuentra rápidamente las entradas coincidentes y sigue los punteros almacenados para recuperar solo esas filas. Para una tabla grande donde solo unas pocas filas coinciden, la ruta del índice puede ser miles de veces más barata.

Cómo funciona un índice B-tree, a alto nivel

El tipo de índice más común es un B-tree. Es una estructura de árbol equilibrado donde las claves se mantienen en orden ordenado. El nodo superior divide el espacio de claves en rangos, cada nodo hijo subdivide aún más, y el nivel inferior (las hojas) contiene los valores indexados reales con punteros a las filas de la tabla. Debido a que el árbol está equilibrado y cada nodo contiene muchas claves, incluso una tabla con cientos de millones de filas generalmente necesita solo de tres a cinco lecturas de nodos para encontrar cualquier valor específico.

Debido a que un B-tree mantiene los valores en orden ordenado, admite más que coincidencias exactas. Maneja eficientemente condiciones de rango (WHERE created_at >= '2024-01-01'), coincidencias de prefijo en cadenas (WHERE email LIKE 'anna%'), y puede devolver filas ya ordenadas, lo que permite a la base de datos omitir un paso de ordenación separado para las cláusulas ORDER BY coincidentes.

Por qué los índices cuestan algo

Los índices no son gratuitos, y este es el compromiso que debe internalizar.

Las escrituras se vuelven más lentas. Cada INSERT debe agregar una entrada a cada índice de la tabla. Cada DELETE debe eliminar entradas. Cada UPDATE que cambia una columna indexada debe actualizar las entradas de índice correspondientes. Una tabla con seis índices efectivamente realiza hasta siete escrituras por cada inserción de fila lógica. En tablas con muchas escrituras, la indexación descuidada perjudica mediblemente el rendimiento.

El almacenamiento crece. Cada índice es una copia completa de los valores de las columnas indexadas más punteros y estructura de árbol. Los índices en tablas grandes pueden rivalizar o superar el tamaño de la tabla en sí, lo que también afecta las copias de seguridad y el almacenamiento en caché de memoria.

Por lo tanto, el principio rector es: los índices intercambian costo de escritura y almacenamiento por velocidad de lectura. Los agrega donde las lecturas se benefician claramente, no en todas partes.

Selectividad: el concepto clave para decidir el valor

La selectividad describe qué tan bien una condición reduce las filas. Una columna altamente selectiva tiene muchos valores distintos en relación con el recuento de filas. Un correo electrónico o un ID de pedido son altamente selectivos: filtrarlos devuelve una o un puñado de filas de millones, y un índice brilla. Una columna como status con tres valores ('pending', 'shipped', 'cancelled') o un indicador booleano is_active tiene baja selectividad: el filtrado aún puede coincidir con el 40% de la tabla.

¿Por qué esto importa? Si una condición coincide con una gran fracción de la tabla, saltar de un lado a otro entre el índice y la tabla para millones de filas a menudo es más lento que simplemente escanear la tabla secuencialmente. Los planificadores de consultas lo saben e ignorarán un índice cuando la fracción de coincidencia estimada sea demasiado alta. Como intuición aproximada, si una consulta típica que usa el índice devolvería más de un pequeño porcentaje de las filas, el índice podría no usarse en absoluto, y es una sobrecarga pura.

Índices compuestos y la regla del prefijo izquierdo

Un índice puede cubrir múltiples columnas, en un orden específico. Por ejemplo:

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

Piense en esto como ordenar las entradas primero por customer_id, luego por created_at dentro de cada cliente, como un directorio telefónico ordenado por apellido, luego por nombre.

La idea del prefijo izquierdo se deriva directamente de ese orden de clasificación. Este índice puede servir eficientemente:

  • WHERE customer_id = 42
  • WHERE customer_id = 42 AND created_at >= '2024-01-01'

Pero no puede servir eficientemente WHERE created_at >= '2024-01-01' solo, porque las entradas para un rango de fechas determinado están dispersas en todos los clientes; no puede usar un directorio telefónico ordenado por apellido para encontrar a todos los llamados "Anna". El índice solo es utilizable cuando sus condiciones restringen un prefijo de su lista de columnas, comenzando desde la columna más a la izquierda. Esto significa que (customer_id, created_at) y (created_at, customer_id) son índices diferentes que sirven a consultas diferentes, y el orden de las columnas debe seguir sus patrones de consulta más importantes. Una regla general común: coloque las columnas filtradas por igualdad primero, luego la columna de rango o de ordenación.

Cuándo un índice no ayuda

  • Baja selectividad: filtrar WHERE is_active = true en una tabla donde el 90% de las filas están activas. El planificador escaneará en su lugar.
  • Funciones o expresiones en la columna: WHERE LOWER(email) = 'x@y.com' no puede usar un índice simple en email, porque el índice almacena valores sin procesar, no transformados. (Algunas bases de datos admiten índices de expresiones, pero el índice simple no se usará).
  • Comodines iniciales: WHERE name LIKE '%son' no puede usar un B-tree, porque el orden ordenado solo ayuda cuando se conoce el prefijo.
  • Omitir la columna más a la izquierda de un índice compuesto, como se describió anteriormente.
  • Tablas muy pequeñas: para unos pocos cientos de filas, un escaneo ya es rápido; el índice agrega costo de escritura sin beneficio.
  • Las discrepancias de tipo o las conversiones implícitas en la columna indexada también pueden evitar el uso del índice.

Dos pequeños ejemplos

Un índice útil. Suponga que su aplicación ejecuta constantemente:

SELECT id, total, created_at
FROM orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;

Entonces este índice encaja perfectamente:

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

La base de datos salta a las entradas del cliente 42, que ya están ordenadas por created_at, lee las 20 más recientes y se detiene. Es rápido en una tabla de cualquier tamaño, y también sirve para búsquedas simples por customer_id gracias al prefijo izquierdo.

Un índice problemático. Suponga que en su lugar crea:

CREATE INDEX idx_orders_status ON orders (status);

donde status tiene tres valores posibles y la mayoría de las filas son 'shipped'. Una consulta como SELECT * FROM orders WHERE status = 'shipped' coincide con la mayor parte de la tabla, por lo que el planificador hará un escaneo de tabla de todos modos. El índice rara vez o nunca se usa, sin embargo, cada inserción y cada actualización de estado paga para mantenerlo. Esto es una pérdida neta. (Una excepción que vale la pena conocer: indexar una columna de baja cardinalidad puede valer la pena cuando un valor es raro y se consulta mucho, como el pequeño conjunto de pedidos 'pending', pero la versión genérica anterior es un error clásico).

Lista de verificación práctica antes de agregar un índice

  1. Identifique primero la consulta lenta real; no indexe especulativamente. Observe los patrones de consulta reales y use EXPLAIN para ver el plan actual.
  2. Verifique la selectividad: ¿las consultas típicas que usan este índice devolverán una pequeña fracción de la tabla? Si no, reconsidera.
  3. Para filtros y ordenaciones multijugador, diseñe un índice compuesto con el orden de columnas correcto (columnas de igualdad primero, luego columnas de rango/ordenación) en lugar de varios índices de una sola columna.
  4. Confirme la regla del prefijo izquierdo: ¿su consulta más común restringe la primera columna del índice?
  5. Asegúrese de que la consulta no anule el índice con funciones, comodines iniciales o conversiones de tipo en la columna indexada.
  6. Pondere el tráfico de escritura: en tablas con muchas escrituras, cada índice adicional tiene un costo real. Elimine los índices que se superponen o son prefijos de otros.
  7. Verifique si un índice existente ya cubre la consulta antes de crear uno nuevo.
  8. Después de crear el índice, verifique con EXPLAIN que el planificador realmente lo usa y mida el tiempo de consulta antes y después.
  9. Revise y elimine periódicamente los índices no utilizados; cuestan escrituras y almacenamiento para siempre.

El modelo mental central a mantener: un índice es una estructura de búsqueda ordenada por la que paga en cada escritura para que las lecturas específicas y selectivas sean baratas. Agregue uno cuando pueda nombrar la consulta que sirve y demostrar que ayuda.

Resultado

#1 | Ganador

Votos ganadores

3 / 3

Puntuación media

90
Modelos evaluadores Anthropic Claude Opus 4.8

Puntuación total

89

Comentario general

La respuesta A es exhaustiva, precisa y está excepcionalmente bien orientada al público objetivo. Separa claramente la analogía del comportamiento real de la base de datos (tal como pedía explícitamente la consigna), explica la estructura B-tree con detalle concreto sobre las lecturas de nodo, y cubre los costes de escritura, el almacenamiento y la selectividad con el matiz correcto, incluyendo el caso en que indexar un valor raro de baja cardinalidad aún puede compensar. Aborda completamente los índices compuestos y la regla del prefijo más a la izquierda con una fuerte ilustración de la guía telefónica, e incluye una sección rica sobre "cuando un índice no ayuda" (funciones, comodines al principio, conversiones de tipo, tablas diminutas). Los dos ejemplos SQL son coherentes y directamente vinculados a patrones de consulta, y la lista de comprobación es altamente aplicable, haciendo referencia a EXPLAIN, la medición y eliminar índices sin uso. Debilidad menor: es más larga y densa de lo estrictamente necesario, pero esto rara vez perjudica la comprensión dado su fuerte estructura.

Ver detalle de evaluación

Claridad

Peso 30%
90

Las explicaciones son precisas y se construyen lógicamente; la separación deliberada de la analogía del comportamiento real, la ilustración de la guía telefónica para el orden de columnas y el modelo mental final hacen que los conceptos abstractos cobren vida. Ligeramente más densa que B pero nunca confusa.

Corrección

Peso 25%
90

Técnicamente preciso en todo momento, incluidos puntos sutiles: los planificadores ignorando índices de baja selectividad, índices de expresión como excepción, fallo con comodines iniciales, problemas de conversión de tipo, y la nota correcta de que un valor raro pero muy consultado de baja cardinalidad aún puede beneficiar. La estimación de lecturas de nodos del B-tree es razonable.

Adecuación al público

Peso 20%
90

Bien ajustada a un desarrollador junior que conoce SELECT/WHERE/JOIN: evita internals profundos, nombra reglas prácticas y vincula cada concepto a una decisión que el desarrollador puede tomar. La densidad es el único riesgo menor para un novato.

Integridad

Peso 15%
90

Cubre cada elemento solicitado y más: índice como estructura, aceleración de lectura, coste de escritura/almacenamiento, B-tree a alto nivel, selectividad, índices compuestos, prefijo más a la izquierda, múltiples casos en que no ayuda, dos ejemplos SQL contrastantes y una lista de comprobación rica que incluye EXPLAIN y eliminar índices no usados.

Estructura

Peso 10%
80

Flujo lógico y bien seccionado desde la definición hasta las compensaciones, selectividad, índices compuestos, casos en que no ayuda, ejemplos y lista de comprobación. Bloques de texto algo más densos reducen la capacidad de escaneo comparado con B.

Modelos evaluadores Google Gemini 2.5 Flash

Puntuación total

92

Comentario general

La respuesta A proporciona una explicación excepcionalmente clara, completa y práctica de los índices de bases de datos, adaptada perfectamente para un desarrollador backend junior. Cubre todos los temas requeridos con excelente profundidad, incluyendo una sección robusta sobre situaciones en las que los índices no ayudan y una lista de verificación muy práctica. Las analogías y las explicaciones directas están bien integradas, y los ejemplos de SQL son pertinentes.

Ver detalle de evaluación

Claridad

Peso 30%
90

La respuesta A es excepcionalmente clara, utilizando encabezados bien estructurados, lenguaje preciso y analogías efectivas (como la guía telefónica para el prefijo más a la izquierda) para explicar conceptos complejos. El flujo es lógico y fácil de seguir.

Corrección

Peso 25%
95

La respuesta A es muy precisa en todas las explicaciones, desde la mecánica del B-tree hasta los matices de la selectividad y los índices compuestos. Identifica correctamente varios escenarios en los que los índices son beneficiosos o perjudiciales, incluido el soporte para consultas de rango y cláusulas ORDER BY con B-trees.

Adecuación al público

Peso 20%
90

La respuesta A está perfectamente adaptada para un desarrollador backend junior. El lenguaje es accesible, la analogía es simple y efectiva, y el consejo práctico es completo sin ser abrumador. El 'modelo mental central' al final es un gran resumen para la audiencia objetivo.

Integridad

Peso 15%
95

La respuesta A es muy completa, cubriendo todos los temas solicitados en profundidad. Proporciona una lista muy completa de situaciones en las que un índice puede no ayudar y una lista de verificación detallada y práctica, superando las expectativas de orientación práctica.

Estructura

Peso 10%
90

La respuesta A tiene una estructura excelente con encabezados claros y descriptivos que guían al lector a través del material de manera lógica. Cada concepto se introduce y explica de manera bien organizada, lo que hace que el contenido sea fácil de digerir.

Modelos evaluadores OpenAI GPT-5.5

Puntuación total

89

Comentario general

La Respuesta A es una explicación didáctica muy completa, precisa y bien estructurada. Explica claramente los índices como estructuras de búsqueda ordenadas separadas, cubre el comportamiento de los árboles B, las compensaciones entre lectura/escritura/almacenamiento, la selectividad, los índices compuestos, el comportamiento del prefijo más a la izquierda y muchas situaciones en las que los índices pueden no ayudar. Sus ejemplos son prácticos y su lista de verificación final es directamente aplicable. Las debilidades menores son algunas simplificaciones amplias, como la implicación genérica de cierto comportamiento de prefijo LIKE en árboles B y la afirmación de que el índice de ejemplo es rápido en una tabla de cualquier tamaño, pero estos no perjudican materialmente la explicación.

Ver detalle de evaluación

Claridad

Peso 30%
88

La Respuesta A es muy clara, con explicaciones directas, ejemplos concretos y transiciones fluidas de la analogía al comportamiento real de la base de datos. Es algo larga, pero el detalle generalmente mejora la comprensión en lugar de oscurecerla.

Corrección

Peso 25%
90

La Respuesta A es técnicamente precisa para una base de datos relacional genérica en el nivel previsto. Explica correctamente las estructuras de índice separadas, la búsqueda en árboles B, las compensaciones entre lectura/escritura/almacenamiento, la selectividad, el orden de los índices compuestos y los casos comunes de no uso, con solo simplificaciones genéricas menores.

Adecuación al público

Peso 20%
87

La Respuesta A se adapta bien a un desarrollador backend junior que conoce SQL básico. Proporciona modelos mentales prácticos, ejemplos realistas y orientación aplicable, aunque su amplitud puede ser un poco densa para una primera introducción.

Integridad

Peso 15%
93

La Respuesta A cubre casi todos los elementos solicitados: qué son los índices, aceleraciones de lectura, costos de escritura y almacenamiento, comportamiento de los árboles B, selectividad, índices compuestos, comportamiento del prefijo más a la izquierda, varios casos en los que los índices pueden no ayudar, dos ejemplos de SQL y una sólida lista de verificación.

Estructura

Peso 10%
90

La Respuesta A está muy bien organizada, con encabezados claros, progresión lógica, ejemplos colocados después de los conceptos y una lista de verificación práctica al final. La estructura apoya fuertemente el aprendizaje.

Hablemos de los índices de bases de datos. Probablemente has escrito consultas SQL que funcionan muy bien en tu máquina de desarrollo con unos pocos cientos de filas. Pero cuando una tabla crece hasta tener millones de filas, algunas de esas consultas pueden volverse increíblemente lentas. Un índice es la herramienta más común que usamos para resolver este problema.

¿Qué es un Índice de Base de Datos? Una Analogía

Piense en un índice como el índice al final de un libro de texto. Si quieres encontrar todas las páginas que mencionan "Árboles B", no lees el libro entero de principio a fin. En su lugar, vas al...

Mostrar respuesta completa

Hablemos de los índices de bases de datos. Probablemente has escrito consultas SQL que funcionan muy bien en tu máquina de desarrollo con unos pocos cientos de filas. Pero cuando una tabla crece hasta tener millones de filas, algunas de esas consultas pueden volverse increíblemente lentas. Un índice es la herramienta más común que usamos para resolver este problema.

¿Qué es un Índice de Base de Datos? Una Analogía

Piense en un índice como el índice al final de un libro de texto. Si quieres encontrar todas las páginas que mencionan "Árboles B", no lees el libro entero de principio a fin. En su lugar, vas al índice, buscas la entrada de "Árboles B" y ves una lista ordenada de números de página (por ejemplo, 112, 254, 256). Esto es mucho más rápido.

Un índice de base de datos funciona de la misma manera. Es una estructura de datos separada que la base de datos mantiene. Contiene una copia de los datos de una o más columnas en orden ordenado, junto con un puntero a la fila original en la tabla. Cuando consultas datos en esa columna, la base de datos puede usar este índice ordenado para encontrar rápidamente los punteros a las filas que necesitas, en lugar de escanear toda la tabla fila por fila (un "escaneo completo de tabla").

Cómo Funciona: El Árbol B

La mayoría de las bases de datos relacionales utilizan un Árbol B para sus índices estándar. No necesitas conocer los detalles profundos de la informática, pero a un alto nivel, un Árbol B es una estructura de árbol autoequilibrada. Imagina una jerarquía ramificada. Para encontrar un valor, la base de datos comienza en el nodo raíz y sigue un camino por las ramas. Cada paso reduce drásticamente la búsqueda. Esto permite a la base de datos encontrar cualquier valor en un conjunto de datos masivo con muy pocos pasos, haciendo que las búsquedas sean increíblemente eficientes (complejidad de tiempo logarítmica, o O(log n)) en comparación con un escaneo completo de tabla (complejidad de tiempo lineal, o O(n)).

Las Contrapartidas: Velocidad de Escritura y Almacenamiento

Los índices no son gratuitos. Vienen con dos costos principales:

  1. Almacenamiento: Un índice es una estructura de datos física almacenada en disco. Duplica los datos de tu tabla, por lo que consume espacio de almacenamiento adicional.
  2. Escrituras más lentas: Esta es la contrapartida más importante. Cuando INSERTAS, ACTUALIZAS o ELIMINAS una fila, la base de datos no solo cambia la tabla. También debe actualizar cada índice que contenga las columnas afectadas para mantenerlo sincronizado y ordenado. Si tienes una tabla con cinco índices, una instrucción INSERT en realidad resulta en seis escrituras: una para la tabla y una para cada índice. Esto puede ralentizar significativamente las aplicaciones con muchas escrituras.

Conceptos Clave para la Indexación Práctica

1. Selectividad
La selectividad se refiere a cuántos valores únicos hay en una columna en relación con el número total de filas.

  • Alta Selectividad: Una columna donde la mayoría de los valores son únicos, como user_id o email_address. Los índices en estas columnas son muy efectivos porque pueden reducir una búsqueda a solo una o unas pocas filas muy rápidamente.
  • Baja Selectividad: Una columna con muy pocos valores únicos, como un indicador booleano is_active (verdadero/falso) o una columna status ('pendiente', 'activo', 'inactivo'). Un índice en una columna de baja selectividad a menudo es inútil. Si buscas todos los usuarios activos, eso podría ser el 80% de tu tabla. Es más rápido para la base de datos leer toda la tabla que ir y venir entre un índice y los datos de la tabla.

2. Índices Compuestos y la Regla del Prefijo Más Izquierdo
Un índice compuesto es un índice en dos o más columnas, como CREATE INDEX idx_name ON users (last_name, first_name);.

El orden de las columnas es crítico. Esta es la regla del prefijo más izquierdo. Un índice en (A, B, C) puede ser utilizado por la base de datos para acelerar las consultas que filtran por:

  • A
  • A y B
  • A, B y C

Sin embargo, no puede ser utilizado para consultas que solo filtran por B, C o B y C. La base de datos necesita las primeras columnas en la definición del índice para comenzar su búsqueda.

Ejemplos de SQL

Supongamos una tabla products con millones de filas.

Buen Ejemplo de Índice:
Muchos usuarios buscan productos por un código de producto único.

-- La Consulta
SELECT name, price FROM products WHERE product_code = 'ABC-12345';

-- La Solución: Un índice en una columna de alta selectividad
CREATE INDEX idx_products_product_code ON products (product_code);

Este índice es muy efectivo porque product_code es único (alta selectividad), y el índice permite a la base de datos encontrar la fila del producto exacto casi instantáneamente.

Ejemplo de Índice Menos Útil:
Queremos encontrar todos los productos que están actualmente disponibles para la venta.

-- La Consulta
SELECT * FROM products WHERE is_available = TRUE;

-- El Índice Problemático
CREATE INDEX idx_products_is_available ON products (is_available);

Este índice no es muy útil. La columna is_available tiene baja selectividad (solo dos valores: verdadero y falso). Si el 90% de los productos están disponibles, la base de datos probablemente ignorará este índice y realizará un escaneo completo de tabla, ya que es más eficiente.

Lista de Verificación: Cuándo Añadir un Índice

Antes de añadir un índice, hazte estas preguntas:

  1. ¿Es la tabla grande? (Los índices en tablas pequeñas tienen poco o ningún beneficio).
  2. ¿Está una consulta específica funcionando lentamente? (No añadas índices a ciegas; añádelos para solucionar un problema de rendimiento conocido).
  3. ¿Filtro frecuentemente en esta columna en una cláusula WHERE o la uso en un JOIN? (Estos son los candidatos principales para indexar).
  4. ¿Tiene la columna alta selectividad? (¿Reducirá el índice significativamente el número de filas a comprobar?).
  5. Para un índice compuesto, ¿mi consulta utiliza las columnas más a la izquierda del índice?
  6. ¿Es esta una tabla con muchas lecturas? (Si la tabla tiene escrituras muy frecuentes pero pocas lecturas, el costo de mantener el índice podría superar los beneficios de lectura).

Resultado

#2

Votos ganadores

0 / 3

Puntuación media

81
Modelos evaluadores Anthropic Claude Opus 4.8

Puntuación total

78

Comentario general

La respuesta B es clara, está bien organizada y tiene el tono adecuado para un desarrollador junior. Utiliza la analogía del libro de texto, explica el comportamiento de los árboles B a un alto nivel con notación Big-O y cubre las compensaciones de lectura/escritura/almacenamiento con precisión. La selectividad, los índices compuestos y la regla del prefijo más a la izquierda se explican de forma correcta y concisa. Los dos ejemplos de SQL son limpios y relevantes. Sin embargo, es notablemente menos completa: el requisito de "cuándo un índice puede no ayudar" solo se aborda parcialmente (principalmente baja selectividad), faltando funciones/expresiones, comodines iniciales, conversiones de tipos y el caso de columna del prefijo más a la izquierda omitida. Tampoco separa claramente la analogía del comportamiento real de la base de datos como se solicitó explícitamente, y la lista de verificación, aunque sólida, es menos práctica (no se menciona EXPLAIN, mediciones o mantenimiento/eliminación de índices no utilizados).

Ver detalle de evaluación

Claridad

Peso 30%
80

Muy legible y limpio con buenos encabezados y redacción sencilla. El marco de Big-O es un buen toque. Ligeramente menos ilustrativo en el orden de los índices compuestos (sin intuición concreta del orden de clasificación), y la analogía y el comportamiento real están algo mezclados en lugar de claramente distinguidos.

Corrección

Peso 25%
80

Preciso en todos los puntos centrales: búsqueda logarítmica de árboles B, matemáticas de amplificación de escritura, selectividad y prefijo más a la izquierda. Sin errores, pero omite varias advertencias correctas (funciones, comodines, conversiones) y ofrece una imagen ligeramente menos completa de cuándo fallan los índices.

Adecuación al público

Peso 20%
80

Excelente ajuste: tono amigable, comienza relacionándose con la experiencia del lector de consultas lentas a escala, y mantiene el uso de jerga al mínimo con una breve explicación de Big-O. Muy accesible, aunque con un poco menos de profundidad para un desarrollador que quiera actuar sobre casos extremos.

Integridad

Peso 15%
60

Cubre la mayoría de los elementos requeridos pero es más delgado en "situaciones en las que un índice puede no ayudar", limitándolo efectivamente a baja selectividad mientras omite funciones/expresiones, comodines iniciales, conversiones y casos de prefijo omitido. Tampoco contrasta explícitamente la analogía con el comportamiento directo como se solicitó.

Estructura

Peso 10%
90

Estructura limpia y escaneable con encabezados claros, listas numeradas y bloques de código bien formateados. La organización es compacta y fácil de navegar, presentada marginalmente mejor que la A.

Modelos evaluadores Google Gemini 2.5 Flash

Puntuación total

85

Comentario general

La Respuesta B ofrece una muy buena explicación de los índices de bases de datos, con una introducción sólida y explicaciones claras y concisas de los conceptos centrales. Utiliza una buena analogía y proporciona ejemplos de SQL relevantes. Sin embargo, es menos completa que la Respuesta A, particularmente en su cobertura de situaciones en las que un índice puede no ser útil y su lista de verificación final es menos detallada.

Ver detalle de evaluación

Claridad

Peso 30%
85

La Respuesta B es muy clara y concisa, con un buen uso de encabezados y viñetas. Las explicaciones son generalmente fáciles de entender, aunque la mención de la 'complejidad temporal logarítmica' podría ser un poco avanzada para un desarrollador junior, incluso con una explicación rápida.

Corrección

Peso 25%
90

La Respuesta B es correcta en todas sus explicaciones de conceptos centrales. La descripción del B-tree, los compromisos, la selectividad y la regla del prefijo más a la izquierda se presentan con precisión. No se identificaron errores fácticos.

Adecuación al público

Peso 20%
88

La Respuesta B también se adapta bien a la audiencia objetivo, con una introducción relatable y explicaciones sencillas. El lenguaje es simple y directo, lo que facilita que un desarrollador junior comprenda los conceptos.

Integridad

Peso 15%
75

La Respuesta B cubre la mayoría de los temas solicitados, pero es menos completa que la Respuesta A. Su sección sobre 'situaciones en las que un índice puede no ser útil' es menos exhaustiva, omitiendo puntos clave como funciones en columnas o comodines iniciales. La lista de verificación final también es más corta y menos detallada.

Estructura

Peso 10%
85

La Respuesta B está bien estructurada con encabezados claros y un uso efectivo de viñetas. La información fluye lógicamente, lo que facilita la lectura y la comprensión de las diferentes secciones.

Modelos evaluadores OpenAI GPT-5.5

Puntuación total

79

Comentario general

La Respuesta B es clara, accesible y en su mayor parte correcta para un desarrollador junior. Explica el concepto central, la analogía del libro de texto, la búsqueda de B-tree a alto nivel, los costos de escritura/almacenamiento, la selectividad, los índices compuestos y el comportamiento del prefijo más a la izquierda. Sin embargo, es menos completa que la Respuesta A: presenta menos casos en los que los índices pueden no ayudar, no discute funciones, comodines iniciales, comportamiento de rangos/orden, decisiones del planificador en profundidad, o cómo verificar con EXPLAIN, y su lista de verificación es más básica.

Ver detalle de evaluación

Claridad

Peso 30%
81

La Respuesta B es clara y fácil de seguir, utilizando un lenguaje sencillo y secciones concisas. Es ligeramente menos explicativa en algunas áreas, especialmente en torno a las decisiones del planificador y cuándo se ignoran los índices.

Corrección

Peso 25%
80

La Respuesta B es en su mayor parte correcta y evita afirmaciones importantes engañosas. Sus explicaciones de B-trees, selectividad e índices compuestos son sólidas, pero es más simplificada y omite algunas advertencias importantes sobre la usabilidad de los índices y el comportamiento del planificador de la base de datos.

Adecuación al público

Peso 20%
84

La Respuesta B es muy accesible para un desarrollador junior, con un lenguaje amigable y ejemplos sencillos. Es menos profunda de lo ideal para alguien que empieza a diseñar índices intencionalmente, pero el tono y el nivel de complejidad son apropiados.

Integridad

Peso 15%
68

La Respuesta B cubre los conceptos principales e incluye dos ejemplos SQL y una lista de verificación, pero omite varios puntos prácticos solicitados o importantes, como funciones en columnas indexadas, comodines iniciales, conversiones de tipos, utilidad de rangos y ORDER BY, y verificación con planes de ejecución.

Estructura

Peso 10%
80

La Respuesta B tiene una estructura limpia y legible con encabezados, viñetas, ejemplos y una lista de verificación. Es coherente, aunque menos completa y menos conectada estrechamente con las decisiones reales de diseño de consultas que la Respuesta A.

Resumen comparativo

Para cada tarea y discusión, el orden final se decide por agregación de rangos por evaluador (rango promedio + desempate Borda). La puntuación media se muestra como referencia.

Evaluadores: 3

Votos ganadores

3 / 3

Puntuación media

90
Ver esta respuesta

Votos ganadores

0 / 3

Puntuación media

81
Ver esta respuesta

Resultados de evaluación

Modelos evaluadores OpenAI GPT-5.5

Motivo del ganador

La respuesta A gana porque es más sólida en los criterios de claridad y corrección, que tienen un gran peso, y además es sustancialmente más completa. Cubre todos los temas solicitados con profundidad práctica, incluye una mejor discusión de casos límite en los que los índices podrían no ser útiles, ofrece una guía más relevante sobre índices compuestos y finaliza con una lista de verificación más práctica. La respuesta B es buena, pero omite varias consideraciones prácticas importantes requeridas por la indicación.

Modelos evaluadores Google Gemini 2.5 Flash

Motivo del ganador

La respuesta A gana debido a su superioridad en cuanto a exhaustividad y profundidad, especialmente en los consejos prácticos cruciales para un desarrollador junior. Su sección sobre 'Cuándo un índice no ayuda' es mucho más completa, cubriendo casos de borde importantes como funciones en columnas, comodines iniciales y desajustes de tipos. Además, su lista de verificación práctica es más detallada y aplicable, proporcionando una mejor guía para la toma de decisiones en el mundo real. Si bien ambas respuestas son claras y correctas, la exhaustividad de la respuesta A la convierte en un recurso de enseñanza más valioso.

Modelos evaluadores Anthropic Claude Opus 4.8

Motivo del ganador

La respuesta A gana en los dos criterios con mayor peso, claridad (30%) y corrección (25%), al mismo tiempo que gana de manera decisiva en completitud (15%). Cumple explícitamente con los requisitos matizados de la indicación que B omite o solo aborda parcialmente: separar la analogía del comportamiento directo de la base de datos, una sección completa sobre "cuándo un índice no ayuda" (funciones, comodines, conversiones, tablas pequeñas, prefijo omitido), la regla de ordenación de columnas igualdad-luego-rango, y una lista de verificación práctica que hace referencia a EXPLAIN y al mantenimiento de índices. B es claro y correcto, pero menos completo y no separa la analogía del comportamiento real como se solicitó. El resultado ponderado favorece a A.

X f L