system onlinepath: /guias/bases-de-datos/indices-en-bases-de-datos-como-aceleran-las-consultas/mode: knowledge_baselocal:
Datos y bases de datos · Nivel intermedio

Índices en bases de datos: cómo aceleran las consultas

Un índice es a una tabla lo que el índice de un libro a sus páginas: convierte una búsqueda que recorrería todo en un salto directo. Bien usados, aceleran enormemente; de más, cuestan caro.

13 min de lectura▣ Actualizada el ◇ Por Underc0de
Respuesta rápida

Un índice es una estructura auxiliar que la base de datos mantiene para encontrar filas rápidamente sin tener que recorrer toda la tabla. La analogía perfecta es el índice de un libro: para encontrar dónde se habla de un tema, no leés el libro entero página por página; vas al índice, buscás el término y saltás directo a la página. Sin índice, la base de datos hace un «recorrido completo» (revisa fila por fila); con índice, hace un salto directo. La diferencia en tablas grandes es abismal: de segundos a milisegundos. Conviene indexar las columnas por las que buscás y filtras a menudo (el WHERE), las que usás para unir tablas (las claves foráneas) y por las que ordenás. La clave primaria ya lleva su índice automáticamente. Pero hay un equilibrio: cada índice ocupa espacio y, sobre todo, ralentiza las escrituras (cada vez que insertás o actualizás una fila, hay que actualizar también sus índices). Por eso no se indexa «todo por si acaso»: se indexa lo que las consultas realmente necesitan. Los índices son la principal herramienta para que una base de datos siga siendo rápida a medida que crece.

Ver índice de contenidos
  1. 01Qué es un índice
  2. 02Qué columnas indexar
  3. 03El costo de indexar
  4. 04Errores frecuentes
  5. 05Preguntas frecuentes
  6. 06Fuentes

Qué es un índice

Ilustración de cómo un índice acelera las búsquedas en una base de datos mediante la analogía del índice de un libro. En la parte izquierda se representa una consulta sin índice: se busca una fila concreta en una tabla grande, y la base de datos, al no tener ninguna ayuda, realiza un recorrido completo de la tabla, revisando fila por fila desde el principio hasta encontrar la que cumple la condición, lo que se representa como una flecha que recorre secuencialmente todas las filas y se etiqueta como lento, especialmente cuando la tabla tiene muchas filas. En la parte derecha se representa la misma búsqueda con un índice: la base de datos consulta primero el índice, que es una estructura auxiliar ordenada que relaciona los valores de una columna con la ubicación de las filas correspondientes, y desde el índice salta directamente a la fila buscada sin recorrer el resto, lo que se representa como un salto directo y se etiqueta como rápido. En el centro se muestra la analogía explicativa del índice de un libro: para encontrar dónde se trata un tema en un libro, no se lee el libro entero página por página, sino que se va al índice del final, se busca el término alfabéticamente y este indica directamente la página, permitiendo saltar a ella; un índice de base de datos hace exactamente lo mismo con las filas de una tabla. En la parte inferior se resume qué columnas conviene indexar: aquellas por las que se busca y filtra con frecuencia, es decir las que aparecen en las condiciones de las consultas; las que se usan para unir tablas, es decir las claves foráneas; y las que se usan para ordenar los resultados. Se indica que la clave primaria ya lleva su propio índice de forma automática. Y se advierte del equilibrio necesario: cada índice ocupa espacio adicional en disco y, sobre todo, ralentiza las operaciones de escritura, porque cada vez que se inserta, modifica o borra una fila, la base de datos debe actualizar también todos los índices de esa tabla, de modo que crear índices de más penaliza las escrituras sin aportar beneficio a las lecturas. Estilo oscuro de base de datos, con la búsqueda sin índice recorriendo toda la tabla a la izquierda, la búsqueda con índice saltando directo a la derecha, y la analogía del índice del libro conectando ambas ideas en el centro.
Sin índice, la base de datos recorre toda la tabla fila por fila (lento); con índice, salta directo a la fila buscada (rápido). Es exactamente como el índice de un libro frente a leerlo entero.

Cuando buscás una fila que cumple una condición (WHERE correo = 'ana@...'), la base de datos tiene dos formas de encontrarla. Sin ayuda, hace un recorrido completo (full table scan): revisa todas las filas hasta dar con la buscada. En una tabla de millones de filas, eso es lentísimo. Un índice le da un atajo.

El índice del libro

Un índice es una estructura ordenada y aparte que relaciona los valores de una columna con la ubicación de las filas que los contienen. Igual que el índice alfabético al final de un libro te lleva directo a la página, el índice de la base de datos le permite saltar a la fila correcta sin leer las demás. La clave es que está ordenado, y buscar en algo ordenado es muchísimo más rápido que revisar todo.

Qué columnas indexar

No todas las columnas necesitan índice: solo las que las consultas usan para buscar. Las candidatas naturales:

  • Columnas del WHERE. Por las que filtrás a menudo (un correo, un estado, una fecha).
  • Claves foráneas. Las columnas por las que unís tablas con JOIN: indexarlas acelera enormemente las uniones.
  • Columnas del ORDER BY. Por las que ordenás resultados: un índice puede evitar el costo de ordenar.
-- Crear un índice sobre la columna por la que se busca a menudo
CREATE INDEX idx_clientes_correo ON clientes(correo);

-- La clave primaria ya está indexada automáticamente; no hace falta

La clave primaria lleva su índice de fábrica. Para el resto, la mayoría de las bases de datos ofrecen una orden (como EXPLAIN) que muestra cómo va a resolver una consulta y si está usando un índice o haciendo un recorrido completo: es la herramienta para decidir con datos, no con suposiciones.

El costo de indexar

Si los índices aceleran las búsquedas, ¿por qué no indexar todas las columnas? Porque los índices no son gratis:

!
Cada índice ralentiza las escrituras

Un índice es una estructura que la base de datos debe mantener actualizada. Cada vez que insertás, modificás o borrás una fila, hay que actualizar también todos los índices de esa tabla. Así que cada índice acelera las lecturas pero ralentiza un poco las escrituras, y ocupa espacio en disco. En una tabla con muchas escrituras, tener índices de más penaliza el rendimiento sin dar nada a cambio. La regla: indexar lo que las consultas reales necesitan —ni más ni menos—, y medir con EXPLAIN en vez de adivinar.

Es un equilibrio entre lecturas y escrituras. Una tabla que se consulta mucho y se modifica poco se beneficia de más índices; una que recibe escrituras constantes conviene mantenerla con los índices justos. El buen criterio es indexar en respuesta a consultas lentas concretas, no «por si acaso».

Errores frecuentes

  • No indexar las columnas de búsqueda. Deja consultas lentas que un índice resolvería al instante.
  • Indexar todo «por si acaso». Penaliza las escrituras y gasta espacio sin beneficio.
  • Olvidar indexar las claves foráneas. Los JOIN por columnas sin índice son mucho más lentos.
  • No usar EXPLAIN. Adivinar en vez de ver cómo la base de datos resuelve realmente la consulta.
  • Crear un índice duplicado. La clave primaria ya está indexada; no hace falta otro igual.
  • Ignorar el costo en escrituras. En tablas muy activas, cada índice de más pesa.
  • Esperar magia sin filtrar bien. Un índice ayuda si la consulta filtra por su columna; si no, no se usa.

Preguntas frecuentes

¿Qué es un índice en una base de datos?

Un índice en una base de datos es una estructura de datos auxiliar que la base de datos mantiene aparte de la tabla y que le permite encontrar filas rápidamente sin tener que recorrer toda la tabla. La analogía más clara y útil es la del índice de un libro: cuando se quiere localizar dónde se trata un tema concreto en un libro, no se lee el libro entero página por página, sino que se acude al índice del final, se busca el término, que está ordenado alfabéticamente, y este indica directamente la página donde aparece, permitiendo saltar a ella de inmediato. Un índice de base de datos hace exactamente lo mismo con las filas de una tabla: es una estructura ordenada que relaciona los valores de una columna con la ubicación de las filas que los contienen, de modo que cuando se busca un valor concreto, la base de datos consulta el índice y salta directamente a la fila correspondiente en lugar de examinar todas las filas una por una. La diferencia de rendimiento es enorme, especialmente en tablas grandes: sin índice, la base de datos realiza lo que se llama un recorrido completo de la tabla, revisando fila por fila hasta encontrar lo buscado, lo que en una tabla de millones de filas resulta muy lento; con un índice adecuado, la misma búsqueda se resuelve casi instantáneamente. Por eso los índices son la principal herramienta para mantener rápidas las consultas a medida que las tablas crecen, y entender cuándo y cómo usarlos es fundamental para el rendimiento de cualquier aplicación que dependa de una base de datos.

¿Qué columnas conviene indexar?

Conviene indexar las columnas que las consultas utilizan efectivamente para buscar, filtrar, unir u ordenar, ya que son en esas operaciones donde un índice marca la diferencia. En primer lugar, las candidatas más claras son las columnas que aparecen con frecuencia en las condiciones de filtrado de las consultas, es decir, en las cláusulas que restringen qué filas se quieren, como buscar por un correo electrónico, por un estado o por un rango de fechas; indexar esas columnas convierte esas búsquedas frecuentes en operaciones muy rápidas. En segundo lugar, es muy recomendable indexar las columnas que se usan para combinar tablas, que típicamente son las claves foráneas, porque las operaciones de unión entre tablas son mucho más eficientes cuando la columna por la que se unen está indexada, y esto suele tener un impacto muy notable en el rendimiento. En tercer lugar, conviene considerar indexar las columnas por las que se ordenan habitualmente los resultados, ya que un índice, al estar ordenado, puede permitir a la base de datos devolver los resultados ya ordenados sin tener que realizar el costoso trabajo de ordenarlos. Hay que tener en cuenta que la clave primaria de cada tabla ya lleva su propio índice de forma automática, por lo que no es necesario crear uno adicional para ella. Para tomar buenas decisiones sobre qué indexar, la mejor práctica no es adivinar, sino apoyarse en las herramientas de análisis de consultas que ofrecen las bases de datos, que muestran cómo se resuelve realmente una consulta y si está aprovechando un índice o recurriendo a un recorrido completo, permitiendo así indexar en respuesta a necesidades reales y medidas.

¿Por qué no indexar todas las columnas?

No conviene indexar todas las columnas porque los índices, a pesar de acelerar las lecturas, tienen costes reales que hacen que un exceso de ellos perjudique el rendimiento en lugar de mejorarlo. El coste más importante es que cada índice ralentiza las operaciones de escritura. Un índice es una estructura que la base de datos debe mantener siempre actualizada y coherente con los datos de la tabla, de modo que cada vez que se inserta una fila nueva, se modifica una existente o se borra una, la base de datos no solo tiene que actualizar la tabla, sino también todos los índices asociados a ella, para reflejar el cambio. Cuantos más índices tenga una tabla, más trabajo adicional supone cada escritura, lo que puede penalizar apreciablemente el rendimiento en tablas que reciben muchas inserciones, actualizaciones o borrados. El segundo coste es el espacio: cada índice ocupa almacenamiento adicional en disco, que en tablas grandes o con muchos índices puede llegar a ser considerable. Por eso indexar todas las columnas por si acaso es contraproducente: muchos de esos índices nunca se usarían en las consultas, pero todos ellos ralentizarían las escrituras y consumirían espacio. La estrategia correcta consiste en encontrar un equilibrio entre la velocidad de lectura y la de escritura, adecuado al perfil de uso de cada tabla: una tabla que se consulta mucho y se modifica poco tolera y agradece más índices, mientras que una tabla sometida a escrituras constantes conviene mantenerla con los índices estrictamente necesarios. La regla práctica es indexar solo lo que las consultas reales necesitan, guiándose por la medición y no por la suposición.

¿Qué es un recorrido completo de tabla?

Un recorrido completo de tabla, conocido en inglés como full table scan, es la operación mediante la cual la base de datos examina todas y cada una de las filas de una tabla, una por una desde el principio hasta el final, para encontrar aquellas que cumplen la condición de una consulta. Es la forma más básica y directa de buscar, pero también la más costosa cuando la tabla es grande, porque el tiempo que tarda crece proporcionalmente al número de filas: si la tabla tiene diez filas, revisar todas es trivial, pero si tiene millones, examinarlas una por una puede tardar mucho. La base de datos recurre a un recorrido completo cuando no dispone de un índice adecuado que le permita localizar directamente las filas buscadas, de modo que no le queda más remedio que mirarlas todas para no dejarse ninguna. Aquí está precisamente el valor de los índices: cuando existe un índice sobre la columna por la que se busca, la base de datos puede evitar el recorrido completo y saltar directamente a las filas relevantes, transformando una operación lenta en una casi instantánea. Conviene matizar que un recorrido completo no siempre es malo ni evitable: en tablas pequeñas puede ser incluso más eficiente que usar un índice, y en consultas que necesitan devolver la mayoría de las filas de una tabla también puede ser lo razonable. El problema aparece cuando una consulta que debería ser selectiva, es decir, que busca unas pocas filas concretas en una tabla grande, acaba haciendo un recorrido completo por falta de un índice apropiado, y ese es justamente el tipo de situación que las herramientas de análisis de consultas ayudan a detectar para corregirla añadiendo el índice que falta.

¿La clave primaria necesita un índice aparte?

No, la clave primaria no necesita que se le cree un índice aparte, porque las bases de datos crean automáticamente un índice sobre la clave primaria en el momento de definirla. Esto tiene todo el sentido, ya que la clave primaria es, por definición, la columna que identifica de forma única cada fila y por la que muy frecuentemente se buscan y referencian los registros, tanto directamente como a través de las relaciones con otras tablas, de modo que necesita ser rápida de localizar. Al crear ese índice de forma automática, la base de datos garantiza a la vez dos cosas: por un lado, la eficiencia en las búsquedas por la clave primaria, y por otro, el cumplimiento de la unicidad, ya que el índice le permite comprobar rápidamente que no se inserten valores duplicados en la clave primaria. Por tanto, intentar crear manualmente un índice adicional sobre la columna que ya es clave primaria sería redundante e innecesario, y solo añadiría el coste de mantener un segundo índice idéntico sin ningún beneficio. Un punto relacionado y práctico es que, aunque la clave primaria se indexa sola, las claves foráneas no siempre lo hacen automáticamente en todas las bases de datos, por lo que sí suele ser recomendable crear índices explícitos sobre las columnas de clave foránea, ya que son las que se usan para unir tablas y su indexación mejora notablemente el rendimiento de esas uniones. En resumen, la clave primaria viene indexada de fábrica y no hay que preocuparse por ella, mientras que para el resto de columnas relevantes, incluidas las claves foráneas, sí hay que decidir y crear los índices de forma consciente.

¿Cómo sé si mi consulta está usando un índice?

Para saber si una consulta está aprovechando un índice o si, por el contrario, está recurriendo a un recorrido completo de la tabla, las bases de datos ofrecen una herramienta de análisis del plan de ejecución, que en muchas de ellas se invoca anteponiendo una palabra clave como EXPLAIN a la consulta. Esta herramienta no ejecuta la consulta de forma normal, o al menos no solo eso, sino que muestra el plan que la base de datos ha decidido seguir para resolverla, es decir, qué pasos va a dar, en qué orden, y crucialmente si va a utilizar algún índice y cuál, o si va a examinar la tabla entera fila por fila. Interpretando ese plan, se puede detectar cuándo una consulta que debería ser rápida está en realidad haciendo un recorrido completo por falta de un índice adecuado, lo que suele ser la causa de las consultas lentas. Esta es la forma correcta y profesional de abordar los problemas de rendimiento, porque permite tomar decisiones basadas en datos concretos sobre lo que la base de datos hace realmente, en lugar de basarse en suposiciones o en la intuición. El flujo de trabajo habitual consiste en identificar las consultas lentas, analizarlas con esta herramienta para ver cómo se están resolviendo, y en caso de detectar recorridos completos innecesarios, crear los índices apropiados sobre las columnas implicadas y volver a analizar para confirmar que ahora sí se utilizan y que la consulta ha mejorado. Este enfoque de medir, ajustar y volver a medir es la base de la optimización de consultas, y evita tanto dejar consultas lentas sin resolver como crear índices inútiles que solo penalizarían las escrituras.

Fuentes

Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.

Aportes de la comunidad Underc0de

  1. Underc0de, foro. Sección Bases de datos. Rendimiento y optimización.
  2. Underc0de, blog. Blog de la comunidad. Artículos de datos.

Documentación oficial

  1. PostgreSQL. Indexes. Documentación oficial sobre índices.
  2. MySQL. Optimization and Indexes. Cómo optimizar con índices.
  3. SQLite. Query Planning. Cómo se usan los índices al planificar.
  4. Use The Index, Luke. Guía sobre índices SQL. Recurso de referencia sobre indexación.