¿Qué acelerarán los índices?
Recuperación de datos: sentencias SELECT.
¿Qué ralentizarán los índices?
Manipulación de datos: instrucciones INSERT, UPDATE, DELETE.
¿Cuándo es una buena idea agregar un índice?
Si cree que desea obtener un mejor rendimiento en la recuperación de datos.
¿Cuándo es una mala idea agregar un índice?
En tablas que verán una gran manipulación de datos: inserción, actualización ...
¿Pros y contras de múltiples índices frente a índices de múltiples columnas?
Las consultas deben abordar el orden de las columnas cuando se trata de un índice de cobertura (un índice en más de una columna), de izquierda a derecha en la definición de columna de índice. El orden de las columnas en la declaración no importa, solo el de las columnas 1, 2 y 3; una declaración debe tener una referencia a la columna 1 antes de que se pueda usar el índice. Si solo hay una referencia a la columna 2 o 3, no se podría utilizar el índice de cobertura para 1/2/3.
En MySQL, solo se puede usar un índice por instrucción SELECT / en la consulta (las subconsultas / etc se ven como una declaración separada). Y hay un límite para la cantidad de espacio por tabla que permite MySQL. Además, ejecutar una función en una columna indexada hace que el índice sea inútil - IE:
WHERE DATE(datetime_column) = ...
select
debido a la combinación de índices. percona.com/blog/2012/12/14/…No estoy de acuerdo con algunas de las respuestas a esta pregunta.
Por supuesto. No cree índices que no utilice ninguna de sus consultas. No cree índices redundantes. Utilice herramientas como pt-duplicate-key-checker y pt-index-use para ayudarlo a descubrir los índices que no necesita.
Otras respuestas han informado que INSERT / UPDATE / DELETE son más lentos cuanto más índices tenga. Eso es cierto, pero considere que muchos usos de UPDATE y DELETE también tienen cláusulas WHERE y en MySQL, UPDATE y DELETE también son compatibles con JOIN. Los índices pueden beneficiar estas consultas más que compensar la sobrecarga de actualizar índices.
Además, InnoDB bloquea las filas afectadas por una ACTUALIZACIÓN o ELIMINACIÓN. A esto lo llaman bloqueo a nivel de fila, pero en realidad es bloqueo a nivel de índice. Si no hay un índice para limitar la búsqueda, InnoDB tiene que bloquear muchas más filas que la fila específica que está cambiando. Incluso puede bloquear todas las filas de la tabla. Estos bloqueos bloquean los cambios realizados por otros clientes, incluso si lógicamente no entran en conflicto.
Si sabe que necesita ejecutar una consulta que se beneficiaría de un índice en uno de los casos anteriores.
Si el índice es un prefijo izquierdo de otro índice existente, o el índice no ayuda a ninguna de las consultas que necesita ejecutar.
En algunos casos, MySQL puede realizar una optimización de combinación de índices y unir o intersecar los resultados de búsquedas de índices independientes. Pero ofrece un mejor rendimiento para definir un solo índice, por lo que no es necesario realizar la combinación de índices.
Para uno de mis clientes de consultoría, definí un índice de varias columnas en una tabla de muchos a muchos donde no había índice, ¡y mejoré su consulta de combinación en un factor de 94 millones!
Diseñar los índices correctos es un proceso complejo, basado en las consultas que necesita optimizar . No debe establecer reglas generales como "indexar todo" o "indexar nada para evitar ralentizar las actualizaciones".
Vea también mi presentación Cómo diseñar índices, de verdad .
fuente
Los índices deben estar informados por el problema en cuestión: las tablas, las consultas que ejecutará su aplicación, etc.
SELECCIONA.
Los INSERTs serán más lentos porque tienes que actualizar el índice.
Cuando su aplicación necesita otra cláusula WHERE.
Cuando no lo necesita para consultar o aplicar restricciones de unicidad.
No entiendo la pregunta. Si tiene una restricción de unicidad que incluye varias columnas, modele como tal.
fuente
Si. No salga a buscar crear índices, créelos según sea necesario.
Cualquier consulta en la tabla / vista de índices.
Cualquier instrucción INSERT contra la tabla indexada se ralentizará, porque cada nuevo registro deberá indexarse.
Cuando una consulta no se ejecuta a una velocidad aceptable. Es posible que esté filtrando registros que no forman parte del PK agrupado, en cuyo caso debe agregar índices basados en los filtros que está buscando (si el rendimiento lo considera adecuado).
Cuando lo hace por el simple hecho de hacerlo , es decir, sobre optimización.
Depende de las consultas que estés intentando mejorar.
fuente
Sí, como todas las cosas, demasiados índices ralentizarán la manipulación de datos.
Una buena idea para agregar un índice es cuando sus consultas son demasiado lentas (es decir, tiene demasiadas combinaciones en sus consultas). Debe usar esta optimización solo después de haber creado un modelo sólido, para ajustar el rendimiento.
fuente