¿El plan de ejecución sería lo suficientemente inteligente como para usar un índice filtrado como el siguiente (donde solo indizo los valores 0 y nulos) para aumentar el rendimiento?
No. No hay soporte directo en SQL Server para el tipo de rechazo de fila de un solo operador que parece tener en mente.
En términos más generales, el índice filtrado no es directamente útil para la consulta dada, y de todos modos no es una definición de filtro de índice válida. En su lugar, podría crear una vista indizada que contenga esos predicados, pero aún así no sería útil para localizar filas para la consulta de destino. Puede volver a escribir la consulta para usar la vista indizada para excluir filas obtenidas con un escaneo completo por separado, pero es difícil ver cómo sería una buena idea en general.
Probablemente, lo más cercano que podría obtener sería un escaneo de la vista indexada que contiene un filtro de mapa de bits, con ese filtro aplicado como parte de un escaneo completo de la tabla de destino. Puede ser un desafío obtener la forma de este plan de consulta de manera confiable.
También podría usar una columna calculada persistente indexada usando una CASE
expresión, pero nuevamente esto requeriría reescribir la consulta original, y requeriría almacenamiento para cada fila de la tabla, más el índice.
De la información dada, parece que lo mejor que puede hacer es definir el índice como:
CREATE NONCLUSTERED INDEX IX_dbo_My_Table__Float_Filtered
ON dbo.My_Table (my_Float_column)
WHERE
my_Float_column <> 0
AND my_Float_column IS NOT NULL;