¿Cuál es la manera eficiente de verificar un nulo o valor para una columna en una consulta SQL? Considere una tabla sql table
con la columna entera column
que tiene un índice. @value
puede ser un número entero o nulo, por ejemplo: 16 o nulo.Manera eficiente de comparar para un NULO o valor para una columna en SQL
Pregunta 1: No estoy seguro, pero parece que uno no debe confiar en el cortocircuito en SQL. Sin embargo, la consulta siguiente siempre funciona correctamente cuando @value
es un número entero o nulo.
select * from
table
where (@value is null or column = @value)
La siguiente consulta es una versión ampliada de la consulta anterior. Funciona correctamente también.
select * from
table
where ((@value is null)
or (@value is not null and column = @value))
¿Las 2 consultas anteriores tendrían la ventaja del índice?
Consulta 2: La consulta a continuación compara la columna con @value
no nulo, sino que compara la columna column
consigo misma, que siempre será verdadera y devuelve todo. Funciona correctamente también. ¿Aprovechará esta consulta el índice?
select * from
table
where (column = isnull(@value, column))
¿Cuál es la mejor manera?
Nota: Si la respuesta varía según las bases de datos, estoy interesado en MS-SQL.
La mejor manera de determinar si algo va a utilizar un índice o no, es a cree una tabla de prueba con muchas filas, cree el índice y verifique el plan de consulta para su consulta. –
Tenga en cuenta que Query 2 ** no ** devolverá valores de la tabla donde la columna es nula, ya que la condición null = null se evalúa como nula, no verdadera.Marca –
, gracias por señalar eso. la columna no es nula, así que eso no sucedería en este caso. – hIpPy