sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué esta instrucción Sql (con 2 uniones de tablas) tarda 5 minutos en completarse?

Esto no está bien.

Tengo dos posibilidades:

1) Las estadísticas están desactualizadas en las tablas. Reconstruir índices y actualizar estadísticas.

2) Como dijiste, los registros de la tabla Geography son grandes y abarcan muchas páginas (no ese registro que abarca varias páginas, ya que no puede, pero el registro está cerca de la marca de 8K). En este caso, curiosamente, crear otro índice no agrupado en el índice agrupado podría ayudar.

ACTUALIZAR

Me alegro de que haya funcionado. Ahora alguna explicación.

En primer lugar, si algo no está realmente bien y el plan de ejecución se ve raro, siempre mira las estadísticas y reconstruye los índices.

La creación de un índice no agrupado para el índice agrupado generalmente no debería proporcionar ningún beneficio, pero cuando la tabla tiene muchos registros y el registro está cerca de su límite de 8K, es útil. Como sabe, SQL cuando va al disco para cargar un registro, carga una página de 8K. De manera similar, al ir a los índices, cargará una página de 8K. Ahora que el índice es un número entero de 4 bytes, esto significa cargar la ID para 2000 registros, mientras que cargará un puñado de registros si usa un índice agrupado (tenga en cuenta que todo lo que necesitamos es la ID para el bit JOIN). Ahora que se trata de una búsqueda binaria, no espero que ayude enormemente solo un poco. Así que tal vez algo más no esté del todo bien, pero es difícil de adivinar sin haber visto el sistema.