Tengo dos tablas masivas con aproximadamente 100 millones de registros cada una y me temo que tenía que realizar una unión interna entre las dos. Ahora, ambas tablas son muy simples; aquí está la descripción:SQL: unión interna de dos tablas masivas
mesa bioentity:
- BioEntityId (int)
- Nombre (nvarchar 4000, aunque esto es una exageración)
- TypeId (int)
mesa de EGM (una tabla auxiliar, de hecho, resultante de las operaciones de importación masiva):
- EMGId (int)
- PID (int)
- Nombre (nvarchar 4000, aunque esto es una exageración)
- TypeId (int)
- LastModified (fecha)
Necesito obtener un Nombre coincidente para asociar BioEntityId con el PId que reside en la tabla de EGM. Originalmente, traté de hacer todo con una sola combinación interna pero la consulta parecía llevar demasiado tiempo y el archivo de registro de la base de datos (en modo de recuperación simple) logró masticar todo el espacio disponible en el disco (eso es un poco más de 200 GB, cuando la base de datos ocupa 18 GB) y la consulta fallaría después de esperar dos días, si no me equivoco. Pude evitar que el registro creciera (solo 33 MB ahora) pero la consulta se ha estado ejecutando sin interrupción durante 6 días y no parece que se vaya a detener pronto.
Lo estoy ejecutando en una computadora bastante decente (4 GB de RAM, Core 2 Duo (E8400) 3GHz, Windows Server 2008, SQL Server 2008) y me he dado cuenta de que la computadora se atasca cada 30 segundos (dar o tomar) por un par de segundos. Esto hace que sea bastante difícil de usar para cualquier otra cosa, lo que realmente me está poniendo de los nervios.
Ahora, aquí está la pregunta:
SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
FROM EGM INNER JOIN BioEntity
ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
tuve configurar manualmente algunos índices; tanto EGM como BioEntity tenían un índice de cobertura no agrupado que contenía TypeId y Name. Sin embargo, la consulta se ejecutó durante cinco días y tampoco finalizó, así que intenté ejecutar Database Tuning Advisor para que funcione. Sugirió eliminar mis índices anteriores y crear estadísticas y dos índices agrupados (uno en cada tabla, que solo contiene el TypeId que me parece bastante extraño, o simplemente tonto, pero de todos modos lo aprobé).
Ha estado funcionando durante 6 días y todavía no estoy seguro de qué hacer ... ¿Alguna idea, chicos? ¿Cómo puedo hacer esto más rápido (o, al menos, finito)?
Actualización: - Ok, he cancelado la consulta y reinicia el servidor para obtener el sistema operativo en funcionamiento de nuevo - Estoy volviendo a ejecutar el flujo de trabajo con los cambios propuestos, de cultivo específicamente el campo nvarchar a una un tamaño mucho más pequeño e intercambiando "me gusta" por "=".Esto se va a tomar por lo menos dos horas, así que voy a publicar más actualizaciones más adelante
Actualización 2 (tiempo 13:00 GMT, 18/11/09): - El plan de ejecución estimado revela un costo 67% con respecto a los escaneos de tabla seguidos por un 33% de coincidencia hash. Luego viene el 0% de paralelismo (¿no es extraño? Esta es la primera vez que uso el plan de ejecución estimado, pero este hecho particular me levantó la ceja), 0% hash match, más 0% paralelismo, 0% top, 0 % table insert y finalmente otro 0% select into. Parece que los índices son basura, como se esperaba, así que haré índices manuales y descartaré los sugeridos.
Sólo por curiosidad ... ¿por qué necesita más de 100 millones de las filas atrás y ¿qué vas a hacer con todos estos datos ?? –
¿Cuál es el valor más grande almacenado en su campo de nombre 4k? Si es sustancialmente menor que 4k, reduzca el tamaño en cada tabla. –
Bioinformática ...:] –