No se puede probar la consulta, pero se necesita la mejor estrategia de indexación para la cláusula WHERE OR.. OR.. OR
Una aplicación ejecuta una rutina una vez a la semana. La última ejecución fue extremadamente lenta y sabemos que se procesarán más datos durante la próxima ejecución. La instrucción más lenta de la rutina, con diferencia, une una tabla temporal a una tabla de productos. Profiler muestra un número muy alto de lecturas, lo que sugiere que no está bien indexado. Durante la última ejecución, la tabla Productos tenía 200 000 filas y la tabla temporal tenía 1200.
update tmp
set tmp.col1 = pd.col1,
tmp.col2 = pd.col2,
tmp.col3 = pd.col3
from #temptable tmp
, Products pd with (nolock)
where tmp.col2 = pd.col2
or tmp.col2 = pd.col3
or tmp.col2 = pd.col4
or tmp.col2 = pd.col5
Solo tengo una oportunidad de aplicar una estrategia de indexación. La tabla temporal se genera a partir de datos que solo existen durante un breve período de tiempo y no existe ninguna copia, por lo que no se puede volver a crear antes de la próxima ejecución. El caché del plan no tiene un plan de ejecución.
La consulta debe actualizarse a ANSI-92, pero la trato como se encontró.
La tabla de productos tiene índices en cada una de las columnas col2, col3, col4, col5, pero no cubre compuestos ni INCLUYE para los valores de actualización.
La tabla temporal no tiene indexación.
No he probado nada porque no hay forma de probar antes de la próxima ejecución en vivo.
¿Alguien puede aconsejarme si debo aplicar un índice compuesto que cubra las 4 columnas de Producto o usar cuatro índices, uno para cada columna e INCLUYE para col1, col2 y col3?
Mostrar la mejor respuesta