Tengo un código .NET que comprueba la existencia de un registro SQL a un intervalo moderadamente alto. Estoy buscando hacer esta verificación como "barata" . como sea posible"SELECCIONAR SUPERIOR 1 1" VS "SI EXISTE (SELECCIONAR 1"
me pregunto las características de dos consultas:
IF EXISTS(SELECT 1
FROM BigTable
WHERE SomeColumn = 200)
SELECT 1 AS FOUND
ELSE
SELECT 0 AS FOUND
VS
SELECT TOP 1 1
FROM BigTable
WHERE SomeColumn = 200
ambos producen planes de ejecución similares pero la parte superior SELECT 1 1 parece ejecutará más rápido.: Menos consulta para analizar y cuándo registro no se encuentra, envía menos por la tubería. También supongo que funciona más rápido en el cliente porque solo necesito verificar el recuento de registros, en lugar de calcular el valor de retorno de IF EXISTS.
La mayoría de los beneficios de rendimiento son insignificantes. Pero si ambos devuelven constantemente el mismo resultado, ¿por qué no elegir el método ligeramente más rápido?
¿Es "SELECT TOP 1 1" la mejor manera de verificar la existencia de un registro en .NET?
(Usamos .NET 3.5, y estoy tratando de evitar LINQ porque no se usa en ninguna otra parte de la aplicación. También tenemos algunas aplicaciones heredadas de VB6 que estamos migrando/reescribiendo, por lo que es posible que necesiten ejecutar esto como bien.)
EDIT: Solo un poco más de detalle en el diseño. Este registro es un "encabezado". Hay otra tabla que tiene registros secundarios que se leerán/analizarán cuando se encuentre este encabezado. La falta de un registro es algo bueno: no hay trabajo que hacer.
EDIT2: La falta de un registro que cumpla la condición se producirá con más frecuencia. Vienen en ondas esporádicas.
No funciona cuando no hay filas que cumplan las condiciones. Pruebe 'SELECCIONAR TOP 1 1 FROM BigTable donde 1 = 0' –
Ese es el punto. Estoy comprobando la existencia de una fila que cumple con la condición. –
Después de "EDITAR": ¿Por qué está comprobando la existencia del registro en lugar de tratar de obtener un solo registro que coincida con sus criterios? Si fetch (select) no devuelve ningún registro, no tiene trabajo que hacer y no es mucho más caro que solo verificar la existencia de dicho registro. Si devuelve registro, tiene cargados sus datos de encabezado y acaba de guardar una consulta de base de datos. –