Normalmente, para verificar a existência no Oracle, farei:
SELECT COUNT(1)
FROM foo
WHERE bar = 'baz'
No entanto, se a foo
tabela contiver várias linhas em que bar='baz'
, essa consulta examinará desnecessariamente a tabela inteira para relatar a contagem total.
Como faço para verificar rapidamente se uma coluna em uma tabela contém pelo menos uma linha com um valor especificado e tenho a consulta em curto-circuito, de modo que assim que detectar que o valor existe, a consulta será interrompida e retornará, ao contrário para digitalizar a mesa inteira?
Idealmente, eu gostaria que essa consulta retornasse um valor escalar, independentemente de quantas linhas na tabela contenham o valor.
A solução a seguir parece causar um curto-circuito (em comparação com SELECT COUNT(1)
, isso é muito mais rápido para uma tabela grande), mas retornará 1 se o valor existir ou não retornará nenhuma linha se o valor não existir. Seria melhor se uma linha fosse sempre retornada.
SELECT 1
FROM DUAL
WHERE EXISTS (
SELECT 1
FROM foo
WHERE bar = 'baz'
)
Basta combinar os dois:
Além da melhoria natural da sua consulta de Balazs, o seguinte deve funcionar