Tengo que seleccionar algunas filas según una condición que no existe en una tabla. Si uso una unión como se muestra a continuación, se ejecuta en menos de 1 segundo.UNIÓN TODO frente a la condición OR en la consulta del servidor sql
SELECT 1 FROM dummyTable
WHERE NOT EXISTS
(
SELECT 1 FROM TABLE t
WHERE Data1 = t.Col1 AND Data2=t.Col2
UNION ALL
SELECT 1 FROM TABLE t
WHERE Data1 = t.Col2 AND Data2=t.Col1
)
pero si uso una condición OR, se tarda cerca de un minuto como servidor SQL está haciendo una piscina perezosa mesa. ¿Alguien puede explicarlo?
SELECT 1 FROM dummyTable
WHERE NOT EXISTS
(
SELECT 1 FROM TABLE t
WHERE ((Data1 = t.Col1 AND Data2=t.Col2) OR (Data1 = t.Col2 AND Data2=t.Col1))
)
La tabla tiene como 800k filas en ella. Me gustan las opciones que me has proporcionado. Actualmente estoy usando el sindicato, pero también podría usar la opción AND NOT EXISTS. Principalmente estaba buscando ver por qué "O" tendría un problema. Supongo que no está usando ningún índice y tiene que almacenar los valores en una tabla temporal para comparar. –
No espero que mi solución 'AND NOT EXISTS' sea mejor que la' UNION'. (por cierto, ¿por qué usas 'UNION ALL' y no' UNION'? –
Creo que la unión es más rápida ya que no hace ningún agrupamiento/filtrado. En mi caso, va a ser una condición mutuamente excluyente así que puede hacer una unión de todo. Y sí, no creo Y no existe funcionará mejor que Union All, solo lee mejor. –