No se usa un índice filtrado que se crea junto con el predicado IS NULL en SQL Server.

Este artículo le ayuda a resolver el problema que se produce al crear el índice junto con la Column IS NULL expresión de predicado en SQL Server.

Versión del producto original: SQL Server
Número de KB original: 3051225

Síntomas

Considere el caso siguiente:

  • Cree un índice filtrado junto con la Column IS NULL expresión de predicado en SQL Server.
  • El campo Columna no se incluye en la estructura de índice. (Es decir, el El campo de columna no es una clave ni una columna incluida en la definición de índice filtrado).

Por ejemplo, cree la consulta siguiente:

CREATE UNIQUE CLUSTERED INDEX i_action_rn ON dbo.filter_test (rn)
CREATE NONCLUSTERED INDEX i_action_filt_action_date_type ON dbo.filter_test (action_type)
WHERE action_date IS NULL

Nota:

Esta consulta no usa el siguiente índice filtrado:

SELECT count(*) FROM dbo.filter_test WHERE action_date IS NULL AND action_type=1

En este escenario, no se usa el índice filtrado. En su lugar, se usa el índice agrupado.

Diagrama que muestra el examen de índice agrupado que se usa.

Solución

Para resolver este problema, incluya la columna que se prueba como NULL en las columnas devueltas. O bien, agregue esta columna como columnas de inclusión en el índice.

CREATE NONCLUSTERED INDEX New_i_action_filt_action_date_type ON dbo.filter_test (action_type) include (action_date) WHERE action_date IS NULL

Diagrama que muestra que se usa la búsqueda de índice filtrada.

Más información