2016-08-04 1 views
-1

oracle, mysql 및 postgres에 적용 할 수있는 레코드가 db에 있는지 확인하는 가장 빠른 방법은 무엇입니까?db에 레코드가 존재하는지 확인하는 가장 빠른 "GENERIC"방법은 무엇입니까?

이 링크 당 : Fastest way to determine if record exists, 우리는 top 절을 사용할 수 있지만 top은 oracle에서 사용할 수 없습니다. 다른 dbs에 대해 다른 쿼리를하고 싶지 않습니다.

따라서 db에 레코드가 있는지 확인하는 가장 좋은 일반 쿼리는 무엇입니까?

+0

[완전히 분리 된] 일반적인 방법이 있는지 확실하지 않습니다. (http://stackoverflow.com/q/9026184/266304). 오라클은 당신이 이중에서 선택해야만하는 '존재'를 가지고 있는데, 이는 일반적인 것이 아닙니다. 그래도 많은 유사한 질문이 제기되었습니다. –

답변

0

SQL 방언이 너무 다르기 때문에 빠른 일반 방법이 없을 것입니다. 데이터베이스 (있는 경우 테스트하지), 그것이 발견 된 첫 번째 레코드 후 중지 할 수 있습니다 알아낼 수있는 아주 똑똑한 경우 항상 작동 하나는

SELECT min(field) FROM mytable WHERE field = ?; 

이다; 하지만 그렇지 않다면 count(*)이 더 빠를 수도 있습니다.

또 다른 아이디어는 프로그래밍 언어에서 커서를 사용하여 1 행만 가져 오는 것입니다. PostgreSQL과 같은 스마트 데이터베이스는 처음 몇 줄을 신속하게 가져 오는 계획을 선택해야한다는 것을 알게 될 것입니다. PostgreSQL을에

0

:

select exists (select 1 from t where column = value); 

일반 limit 사용 : 대신 select *의에서 select 1 (또는 상수) 데이터베이스가 그 기능이있는 경우 색인 만 검색 할 수 있습니다 사용

select 1 
from t 
where column = value 
limit 1 

.

+0

'limit'은 일반적이지 않습니다 - 오라클은 그것을 지원하지 않습니다 (12c에서도 구문이 다릅니다). –

관련 문제