2010-01-27 14 views

Respuesta

70

¿Para qué?

  • más rápida para un SI habría IF EXISTS (SELECT * FROM Table)...
  • Para un conjunto de resultados, SELECT TOP 1 1 FROM Table vuelve cero o uno filas
  • Para exactamente una fila con un recuento (0 o distinto de cero), SELECT COUNT(*) FROM Table
26

Además, se puede utilizar exists

select case when exists (select 1 from table) 
      then 'contains rows' 
      else 'doesnt contain rows' 
     end 

o para comprobar si hay filas secundarias para un registro particular:

select * from Table t1 
where exists(
select 1 from ChildTable t2 
where t1.id = t2.parentid) 

o en un procedimiento de

if exists(select 1 from table) 
begin 
-- do stuff 
end 
+0

usando mayúsculas/minúsculas ... cuando y/o si puede ser un poco más lento que no usarlas. – Sasa

1

puede' t solo cuenta las filas usando select count(*) from table (o una columna indexada en lugar de * si s peed es importante)?

Si no, entonces tal vez this article puede apuntar en la dirección correcta.

7

Al igual que otros dijo que se puede usar algo así:

IF NOT EXISTS (SELECT 1 FROM Table) 
     BEGIN 
     --Do Something 
     END 
    ELSE 
     BEGIN 
     --Do Another Thing 
     END 
0

Para el mejor rendimiento, utilice el nombre de columna específica en lugar de * - por ejemplo:

SELECT TOP 1 <columnName> 
FROM <tableName> 

Esto es óptimo, ya que, en lugar de devolver toda la lista de columnas, se está volviendo uno solo. Eso puede ahorrar algo de tiempo.

Además, devolver solo la primera fila si hay algún valor lo hace aún más rápido. En realidad, solo obtiene un valor como resultado, si hay filas o ningún valor si no hay filas.

Si usa la tabla de manera distribuida, que probablemente sea el caso, entonces el transporte de un solo valor del servidor al cliente es mucho más rápido.

También debe elegir sabiamente entre todas las columnas para obtener datos de una columna que puede tomar la menor cantidad de recursos posible.

Cuestiones relacionadas