La indexación de la base de datos es la forma más común conocida y utilizada por los desarrolladores de back-end para optimizar las consultas de la base de datos. En este artículo, discutiremos sobre la indexación de bases de datos en detalle.
Un índice de base de datos permite que una consulta recupere datos de una base de datos de manera eficiente. En palabras más simples, la indexación es una forma de colocar una tabla desordenada en un orden que maximizará la eficiencia al buscar un registro.
Los índices se pueden relacionar con tablas específicas y constan de una o más claves. Además, una tabla puede tener múltiples índices construidos a partir de ella.
Cuando una tabla de base de datos no está indexada, no habrá un orden claro de las filas, por lo tanto, para completar cualquier consulta, deberá buscar en las filas de forma lineal, es decir, la consulta deberá buscar en cada fila para encontrar las filas con la condición coincidente. Como puede imaginar, esto no es ideal y puede ser un problema al mirar dentro de una tabla de base de datos con una gran cantidad de datos.
Por ejemplo, tenemos una tabla como la que se muestra a continuación:
ID DE LA COMPAÑÍA | UNIDAD | COSTO_UNITARIO |
---|---|---|
10 | 12 | 1.15 |
12 | 12 | 1.05 |
14 | 18 | 1.31 |
18 | 18 | 1.34 |
11 | 24 | 1.15 |
dieciséis | 12 | 1.31 |
10 | 12 | 1.15 |
12 | 24 | 1.3 |
18 | 6 | 1.34 |
18 | 12 | 1.35 |
14 | 12 | 1,95 |
21 | 18 | 1.36 |
12 | 12 | 1.05 |
20 | 6 | 1.31 |
18 | 18 | 1.34 |
11 | 24 | 1.15 |
14 | 24 | 1.05 |
Y luego, queremos ejecutar una consulta de la siguiente manera:
SELECT company_id, units, unit_cost FROM index_test WHERE company_id = 18
En este caso particular, la base de datos tendría que buscar en los 17 registros en el orden en que aparecen en la tabla, de arriba a abajo, uno a la vez, para buscar todas las posibles instancias de company_id
como 18.
Esto solo consumirá más y más tiempo a medida que aumente el tamaño de la tabla. ¿Cómo puede ayudar aquí la indexación? La indexación puede ayudarnos a configurar la columna con la condición de búsqueda en ( company_id
en este caso) de manera ordenada para optimizar el rendimiento de la consulta.
Con un índice en la columna company_id
, la tabla se vería así:
ID DE LA COMPAÑÍA | UNIDAD | COSTO_UNITARIO |
---|---|---|
10 | 12 | 1.15 |
10 | 12 | 1.15 |
11 | 24 | 1.15 |
11 | 24 | 1.15 |
12 | 12 | 1.05 |
12 | 24 | 1.3 |
12 | 12 | 1.05 |
14 | 18 | 1.31 |
14 | 12 | 1,95 |
14 | 24 | 1.05 |
dieciséis | 12 | 1.31 |
18 | 18 | 1.34 |
18 | 6 | 1.34 |
18 | 12 | 1.35 |
18 | 18 | 1.34 |
20 | 6 | 1.31 |
21 | 18 | 1.36 |
Ahora, la base de datos puede simplemente buscar company_id
igual a 18 y devolver todas las columnas solicitadas para esa fila, y luego pasar a la siguiente fila. Si la siguiente fila también tiene company_id
como 18 nuevamente, también devolverá las columnas de solicitud para esta fila, pero si la siguiente fila tiene company_id
como 18, la base de datos sabe que puede detener la búsqueda aquí y terminar la respuesta. .
Esta fue una explicación bastante simple de qué son los índices de bases de datos y qué pueden hacer, pero hay mucho más en juego en el proceso. Echemos un vistazo más profundo a cómo funciona la indexación.
En realidad, la tabla de la base de datos no se reordena cada vez que se modifican las condiciones de la consulta para optimizar el rendimiento de la base de datos, pero en realidad sucede que el índice hace que la base de datos cree una estructura de datos separada que debería poder ordenarse fácilmente.
Es importante tener en cuenta que cuando se crea un índice en una columna de una base de datos, se crea una estructura de datos en esa columna específica y ninguna otra columna se almacena en esta estructura de datos. Por ejemplo, en el ejemplo anterior, nuestra estructura de datos solo contendrá company_id
y ninguna otra columna como unit
o unit_cost
.
Pero aquí surge una pregunta legítima: ¿cómo sabe la base de datos qué otros campos de la tabla se devolverán para una consulta? Tratemos de entender cómo.
Los índices de la base de datos almacenan punteros para simplemente hacer referencia a la información para la ubicación de la información adicional en la memoria. En otras palabras, el índice contiene el company_id
y la dirección de esa fila en particular en la memoria. En este ejemplo, el índice de la base de datos se verá así:
ID DE LA COMPAÑÍA | PUNTERO |
---|---|
10 | _123 |
10 | _129 |
11 | _127 |
11 | _138 |
12 | _124 |
12 | _130 |
12 | _135 |
14 | _125 |
14 | _131 |
14 | _133 |
dieciséis | _128 |
18 | _126 |
18 | _131 |
18 | _132 |
18 | _137 |
20 | _136 |
21 | _134 |
Con este índice, la consulta puede verificar las filas en la columna company_id
que tienen 18 como valor y luego, usando el puntero, puede encontrar la información relacionada para ese registro.
Habiendo entendido lo que esperamos del índice, echemos un vistazo a las estructuras de datos comunes que se pueden usar para la indexación de bases de datos:
Los árboles B son las estructuras de datos de índice más utilizadas porque son rápidos para búsquedas, eliminaciones e inserciones. Todas estas operaciones son posibles en tiempo logarítmico y los datos contenidos en un árbol B se pueden clasificar fácilmente.
Los índices hash se utilizan comúnmente para describir índices que utilizan tablas hash . Debido a que las tablas hash son particularmente eficientes para buscar datos, las consultas que buscan una coincidencia exacta pueden procesarse rápidamente. La clave en un índice hash es el valor de la columna, y el valor en una tabla hash es una referencia a los datos de la fila de la tabla.
Las tablas hash, por otro lado, no son estructuras de datos ordenadas; por lo tanto, pueden ser ineficientes para otros tipos de búsquedas.
R-tree se usa con frecuencia en bases de datos espaciales, generalmente para indexar información multidimensional, como coordenadas geográficas, rectángulos, polígonos, etc. Es útil para búsquedas como "buscar todas las cafeterías dentro de las 2 millas de mi ubicación".
Los índices de mapa de bits son útiles para columnas que tienen un alto número de ocurrencias de tales valores, es decir, columnas con baja selectividad. Por ejemplo, considere una columna que tiene valores booleanos.
Los índices están diseñados para aumentar el rendimiento de la base de datos; por lo tanto, la indexación se puede usar siempre que necesitemos mejorar significativamente el rendimiento de la base de datos. Cuanto más se expanda su base de datos, más probable es que la indexación lo beneficie.
Sin embargo, lo primero y más importante que debe recordar es que el índice ocupa espacio adicional; por lo tanto, cuanto mayor sea la tabla, mayor será el índice. Cada vez que realice una operación de agregar, eliminar o actualizar, también deberá ejecutar la misma operación en el índice.
Cuando se escriben datos en la base de datos, primero se actualiza la tabla original, seguida de otros índices basados en esa tabla. Cuando se realiza una escritura en la base de datos, los índices se vuelven inoperables hasta que se actualizan. Los índices nunca serán funcionales si la base de datos recibe escrituras continuamente.
Esta es la razón por la que los índices a menudo se aplican a bases de datos en almacenes de datos que obtienen nuevos datos de forma planificada (durante las horas de menor actividad) en lugar de bases de datos de producción que pueden recibir nuevas escrituras todo el tiempo.
El siguiente fragmento de código muestra cómo crear un índice en una sola columna en una base de datos SQL:
CREATE INDEX name_index ON Employee (Employee_Name);
Si desea crear un índice en varias columnas, el comando SQL se verá así:
CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age);
En general, un índice debe construirse en una tabla solo si se accederá con frecuencia a los datos de la columna indexada.
Por lo tanto, discutimos la indexación de bases de datos en detalle en este artículo y también aprendimos sobre las estructuras de datos utilizadas para implementar la indexación de bases de datos y también cuándo es recomendable usar índices y otros.
Para resumir todo, aquí hay un resumen rápido:
Esto es todo por este artículo. La indexación de bases de datos es un tema amplio y un poco complicado, espero que este artículo sea útil para comprender los conceptos básicos del concepto.
¡Sigue leyendo!