Indexando una base de datos

12

No estoy tan familiarizado con las bases de datos y ahora estoy tratando de entender el mecanismo de indexación.

Por lo que sé, en un RDBMS, la indexación en una columna hace que la búsqueda por esa columna sea más rápida. Esto también es válido para las tiendas triples, solo en los índices se supone que buscará (por ejemplo) principalmente por el sujeto, luego por el objeto, etc.

No estoy seguro acerca de RDBMS, pero en las tiendas triples puede definir más de un índice, permitiendo que la tienda elija el mejor índice para cada consulta (espero que lo haya entendido bien). Naturalmente, aparece la siguiente pregunta:

¿Por qué no debería agregar todos los índices posibles a una tienda triple y extenderme a un RDBMS, por qué no hacer índices en cada columna (suponiendo que no soy demasiado vago)?

    
pregunta Dragos 09.02.2012 - 15:02

5 respuestas

25

Porque, esencialmente, un índice es una tabla adicional, donde la clave principal es el campo que está indexando y el único contenido es la clave principal de su tabla principal. Por lo tanto, cada actualización debe replicarse en cada índice que use el campo que actualice.

Esto es particularmente notable en las inserciones. Imagínese si cada inserción que hiciera en una tabla tuviera que ser replicada en otras 20 tablas. Va a ser muy lento.

Tenga en cuenta que esto se agrava aún más con los índices compuestos, agrupados y de texto completo, pero aún no quiero complicar el problema.

    
respondido por el pdr 09.02.2012 - 15:18
2

Los índices son básicamente estructuras de datos adicionales que se deben crear y almacenar. La generación de recursos inútiles desperdicia el poder de la CPU (durante las operaciones de escritura) y su almacenamiento desperdicia la capacidad del disco.

¿Por qué querría crear y almacenar índices que nunca usa?

    
respondido por el Matěj Zábský 09.02.2012 - 15:18
2

Solo coloca índices cuando sea necesario. Como regla general cuando estoy desarrollando un esquema de base de datos, cada tabla obtiene un Índice de clústeres de claves primarias de PK para comenzar. Este será el identificador único para los datos en esa tabla. Puede estar en 1 columna o en muchas.

Después de eso, por lo general solo agrego Índices únicos no agrupados en la (s) columna (s) en las que deseo aplicar la singularidad.

Este es el esquema base. A medida que la aplicación se desarrolla y madura, agregamos índices según sea necesario en función de los problemas de rendimiento y de cómo estamos consultando los datos.

Cada índice agregado aumenta el espacio utilizado, así como la adición de mantenimiento adicional. Así que elige sabiamente tus índices.

    
respondido por el Jon Raynor 09.02.2012 - 15:27
2

La fortaleza de los Índices es que son 1) una estructura de datos que se puede buscar rápidamente y 2) más compacta que las tablas reales, lo que permite que más del índice se ajuste a la memoria en lugar de paginarlo en el disco.

Si tiene un índice en cada columna, entonces los índices en sí tomarán más espacio que la tabla que representan. Si la base de datos realmente usa todos los índices, requerirá más tiempo para intercambiarlos dentro y fuera de la memoria. Además, cada índice debe actualizarse de forma inerte, actualizarse o eliminarse.

Más allá de eso, los índices en una sola columna ni siquiera son lo mejor que puedes hacer. La mayoría de las bases de datos de relaciones realmente permiten un índice en varias columnas, y el orden de estas columnas es importante. Por ejemplo, si quiero buscar en una base de datos para todas las personas que asistieron a Duke de las clases entre 1980 y 1984, entonces lo que quiero es un índice en (Escuela, Clase). La consulta no podría utilizar un índice con las mismas columnas, pero se invirtió.

Entonces, para crear cada índice posible, hay al menos n! Formas de organizar columnas en un índice. Con solo 5 columnas, hay 120 índices posibles.

Ya que hay tantos índices posibles, realmente tienes que determinar qué índices son útiles para tu aplicación y crear solo esos.

    
respondido por el Chris Pitman 09.02.2012 - 15:33
2

La creación de un índice para cada columna en una tabla suele ser un desperdicio de espacio y, como otros han mencionado, puede ralentizar las operaciones de inserción / actualización. Se utiliza un índice para acelerar las consultas. Solo recomendaría agregar un índice a una columna si observa un bajo rendimiento al consultar los valores en esa columna.

Es posible que algunas bases de datos requieran un índice para la clave principal de una tabla, por lo que es posible que no tenga una opción sobre esa. Además, si tiene columnas de texto muy grandes, existen tecnologías específicas que están diseñadas para la búsqueda e índice de texto completo, pero no siempre son los mismos tipos de índice que usaría para una columna numérica pequeña.

    
respondido por el FrustratedWithFormsDesigner 09.02.2012 - 15:24

Lea otras preguntas en las etiquetas