Tengo 10mln filas en mi tabla en MySQL y 7 índices en esta tabla. Ahora cuando trato de agregar 8th, toma un tiempo infinito para hacer esto. ¿Hay alguna manera de solucionar este problema para agregar 8vo índice fácil y rápido?¿Cómo crear índice más rápido?
Respuesta
Esta es una de las mil formas en que MySQL simplemente apesta. Por diseño ...
Detalles: http://lists.mysql.com/mysql/202489
y no me importa si pierdo el karma de esta respuesta.
Sí, creo que estoy hablando de –
Estaba sorprendido cuando vi que la ejecución de ALTER TABLE para cambiar el valor predeterminado - o capacidad de anulación - de una columna, se realizaba copiando toda la tabla y recreando todos los índices. Estas cosas toman muy poco tiempo en otros DMBS; la forma recomendada de hacerlo en MySQL para tablas grandes era ensuciar el sistema de archivos, cambiar la definición de la tabla con un archivo de datos vacío y volver a colocar el archivo de datos completo en su lugar. –
El póster de este artículo es completamente incorrecto. MySQL reconstruye tablas en muchos casos cuando lo hace ALTER TABLE, pero nunca reconstruye la tabla más de una vez por sentencia ALTER; además, puedes hacer un número arbitrario de modificaciones con un solo ALTER si lo deseas. – MarkR
No, el tiempo que se tarda en crear un índice es directamente proporcional a la cantidad de datos que tiene. En MS SQL creo índices en una tabla con tantos registros en aproximadamente 10 minutos.
EDITAR: Después de ver el comentario, por favor elabore en infinito. Por definición, estás diciendo que nunca termina, mi respuesta está relacionada con una creación de índice de ejecución larga y no infinita.
Sí, tomó 15 minutos –
Entonces eres casi tan bueno como se pone. La indexación es una tarea muy intensa, especialmente con muchos registros. –
¿Qué motor está utilizando? La implementación de ALTER TABLE ... CREATE INDEX varía significativamente.
Usando MyISAM, cualquier cambio de índice requiere una reconstrucción completa de la tabla. Esto no es inherente al motor, sino un error que nunca se ha corregido.
Al utilizar InnoDB, la creación de un índice secundario no requiere una reconstrucción de la tabla, pero esta optimización solo está disponible si está utilizando el complemento InnoDB (en lugar del motor enviado anterior). Cambiar la clave principal siempre requiere una reconstrucción, porque está agrupada.
La reconstrucción de la tabla (en cualquier caso) requiere mucho trabajo, ya que debe reconstruir todos los índices existentes, así como reescribir las filas, para completar la operación. Si su mesa cabe en la RAM (las filas de 10M suenan como debería hacerlo fácilmente), esto es relativamente rápido.
Reconstruir una mesa que no cabe en ram es bastante costosa, recomiendo que se evite si es posible.
La reconstrucción de un índice individual que no cabe en el RAM, es MUY costosa y es mejor evitarla.
¿Con qué frecuencia necesita agregar nuevos índices? ¿Quizás pueda completar las tablas con el índice ya creado?
- 1. Cómo crear CreateFile lo más rápido posible
- 2. ¿Cómo eliminar más rápido?
- 3. Exploración de tabla vs. Agregar índice: ¿qué es más rápido?
- 4. mariscal vuelca más rápido, cPickle carga más rápido
- 5. ¿Es mejor un índice dividido globalmente (más rápido) que un índice no particionado?
- 6. Izquierda JOIN más rápido o Inner Join más rápido?
- 7. Matplotlib correr más rápido
- 8. ¿Es + = más rápido que - =?
- 9. strlen más rápido?
- 10. Más rápido que String.Replace()
- 11. Más rápido javac/ant?
- 12. ¿Es `extender` más rápido que` + = `?
- 13. ¿SQLite es realmente más rápido que MySQL?
- 14. ¿Cómo hacer que doxygen funcione más rápido?
- 15. ¿Cómo puedo hacer cout más rápido?
- 16. ¿Cómo se hace Python/PostgreSQL más rápido?
- 17. ¿Cómo puedo unir este texto más rápido?
- 18. ¿Cómo hacer que JVM arranque más rápido?
- 19. Como leer más rápido BufferedReader
- 20. Quicksort ordena números más grandes más rápido?
- 21. postgres crear un índice
- 22. IPC más rápido en PHP
- 23. ¿Concatenar una matriz en sí mismo más rápido que recorrer la matriz para crear más índices?
- 24. Desarrollo de Android más rápido
- 25. Reemplazo más rápido para Regex
- 26. Direccionamiento de matriz más rápido
- 27. Algo más rápido que get_headers()
- 28. RSpec más rápido con JRuby
- 29. Algo más rápido que HttpHandlers?
- 30. Generador de permutación más rápido
No debe ser infinito. Proporcione detalles del esquema y el índice de su tabla. –
Y si toma "para siempre", compruebe si se está quedando sin espacio en disco en algún lugar; la creación de índices puede requerir una gran cantidad de espacio temporal. – nos
Es un error de MySQL que cada índice siguiente tome más tiempo. Tengo 400 MB de memoria real y 1,6 MB de intercambio, y no se usa en absoluto mientras creo el índice, y tengo como 20 GB de espacio –