2010-07-17 13 views
16

Cuál es la mejor en rendimiento a determinado si un elemento existe o no, especialmente si la tabla contiene más de 700.000 fila¿Cuál es la mejor manera de verificar si el artículo existe o no ?: Seleccione Recuento (ID) O ¿Existe (...)?

if (Select count(id) from Registeration where email='[email protected]') > 0 
    print 'Exist' 
else 
    print 'Not Exist' 

O

if Exists(Select id from Registeration where email='[email protected]') 
    print 'Exist' 
else 
    print 'Not Exist' 

Respuesta

28

existe, siempre

  • COUNT atravesar la tabla o un índice: solicitó un COUNT
  • EXISTS se detendrá tan pronto como encuentre un fila

Editar, para ser claro

Por supuesto, en este caso, si la columna de correo electrónico es único e indexados será estrecha.

En general, EXISTS usará menos recursos y es más correcto también. Está buscando la existencia de una fila, no "más que cero", incluso si son las mismas

Edit2: En EXISTS, puede usar NULL, 1, ID, o incluso 1/0: no es comprobado ...

21 de de mayo de 2011 de edición:

parece que este se optimizó en SQL Server 2005 + por lo que cuenta ahora es la misma que existe en este caso

+2

+1. Sin embargo, en el ejemplo simplificado, si 'email' está indexado, la diferencia debe ser tan mínima que sea inconmensurable. – Toby

+0

@Toby: cierto. Estaba editando como lo publicaste. – gbn

4

también tener en cuenta que sólo Count() return int en el que si cuenta algunos datos que exceden int generará el error

+1

sí, si tiene más de 2 mil millones de filas, entonces debe usar 'count_big', o el equivalente de su RBMS. – Donnie

Cuestiones relacionadas