¿Hay alguna razón para usar el índice para tablas muy pequeñas (hasta 1000 filas)?

9

Durante el desarrollo de la aplicación, tengo muchas tablas que almacenan una cantidad "pequeña" de datos (generalmente 10-40 valores, id+ valuey, a veces type) que contienen atributos para "objetos", como fresco / podrido, rojo / verde / azul para productos.

No pongo estos atributos en la tabla de productos porque los componentes electrónicos no pueden ser frescos, y el gas oxígeno no puede ser rojo y las tablas no pueden tener un recuento de filas ilimitado ...

Para almacenar atributos, uso tablas pequeñas personalizadas donde el campo 2-3: idpara vincular, namepara mostrar en la aplicación y en algún momento typesi los grupos de atributos en la misma categoría.

Los "objetos" primarios están vinculados a atributos a través de tablas intermedias de varios a varios.

¿Hay alguna razón para crear y mantener índices para esos "diccionarios pequeños" con menos de 1000 elementos (generalmente 10-40)?

Mi base de datos de destino es Oracle, pero espero que esa respuesta sea independiente del proveedor

Lleno, no, pero no tengo habilidades técnicas para justificar mi llenado ...

gavenkoa
fuente

Respuestas:

14

En general si. En ausencia de un índice, el patrón de acceso tiene que inspeccionar cada fila, solo para ver si es el que necesita o no. El problema no es el tamaño de la tabla, sino la concurrencia. Dependiendo de su nivel de aislamiento, sus escaneos pueden bloquearse detrás de transacciones no confirmadas solo para esperar a que se desbloqueen las filas que finalmente son 'poco interesantes'. Debido a que su análisis está garantizado para 'mirar' en cada fila, cada análisis se bloqueará detrás de cualquier escritura (insertar, eliminar o actualizar). El valor predeterminado de Oracle es el aislamiento de instantáneas, lo cual está bien en esta situación (sin bloqueo), pero otros proveedores prefieren otra cosa, por ejemplo. SQL Server se configurará de forma predeterminada como Lectura confirmada, lo que bloquea.

Con un índice presente, su patrón de acceso solo mirará las filas relevantes (dentro del rango de teclas deseado), por lo que la posibilidad estadística pura de golpear un conflicto de bloqueo se reduce en gran medida.

Remus Rusanu
fuente
Gracias por la explicación, tengo una pregunta de seguimiento (a pesar de que ahora es 3 años después). ¿Qué pasa con las tablas muy pequeñas con 3 o 4 filas como máximo?
Rob el
Es muy probable que se escaneen las tablas pequeñas de Cert (que caben en 1-2 páginas)
Remus Rusanu
Se requiere @Remus para crear un índice en MySQL
Singh Kailash