Advertencia por falta de estadísticas en el plan de ejecución


23

Tengo una situación que no puedo entender. Mi plan de ejecución de SQL Server me dice que me faltan estadísticas en la tabla, pero las estadísticas ya están creadas:

Advertencia

Pero si miramos la tabla, veremos que hay una estadística que se ha creado automáticamente:

ingrese la descripción de la imagen aquí

¿Alguien puede ayudar a entender cómo puede ser?

Las estadísticas Auto_Update y Auto_Create están activadas en la base de datos actual.

Estoy usando SQL Server 2014.

Respuestas:


15

La advertencia no siempre corresponde a las estadísticas faltantes de una sola columna .

No hay una manera fácil de determinar con precisión la estadística exacta que el optimizador buscó y no encontró en todos los casos, pero casi siempre es una estadística de varias columnas que proporcionaría información de correlación a través de múltiples predicados de igualdad en la consulta.

Quizás en su caso corresponda exactamente con los predicados en el Filtro después del análisis donde aparece la advertencia.

Sería bueno que SQL Server informara todas las columnas para la advertencia de 'estadística faltante', pero desafortunadamente no es así como funciona hoy.

Puede ser necesaria una cierta cantidad de prueba y error para identificar la estadística de varias columnas que debe crear para eliminar la advertencia. Tenga en cuenta que las estadísticas de varias columnas no se pueden crear automáticamente. A pesar de la advertencia, es posible que la calidad de la estimación mejore o no, incluso si se proporciona la estadística faltante.


8

Como parece claro que ya existe una estadística para la columna en particular, ofrezco dos posibilidades:

  1. Object Explorer apunta a una base de datos diferente: sospecho que la base de datos tiene DEVel nombre, por lo que es posible que en un caso esté viendo dev y en otro no.
  2. El plan que se utiliza es anterior a la creación de la estadística (ya sea que se generó antes o, lo que es menos probable, algo impidió que se activara una compilación cuando se creó la estadística).

Valide que la respuesta simple (1) no sea el problema e intente emitir la misma consulta con OPTION (RECOMPILE)para confirmar o descartar (2).


1
Aaron Bertnand, muchas gracias por tu respuesta. Pero Object Explorer apunta al db actual y agregar OPTION (RECOMPILE) no soluciona el problema. Quiero agregar también que mi consulta está ejecutando un procedimiento almacenado.
Artashes Khachatryan

2

Acabo de notar que cuando recibe tales advertencias sobre estadísticas, si ejecuta su consulta o procedimiento con la configuración a continuación:

SET SHOWPLAN_ALL ON

ingrese la descripción de la imagen aquí

puedes ver cuáles son las estadísticas que faltan:

ingrese la descripción de la imagen aquí

y usando los scripts aquí puede ver qué estadísticas están actualmente en su lugar, y si faltan, puede agregarlas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.