[SQL] 어디 연습에서 온 "(에서 ... 1 선택)을 존재"는 무엇입니까?
SQL어디 연습에서 온 "(에서 ... 1 선택)을 존재"는 무엇입니까?
사람들의 압도적 인 다수는 다음과 문 사이에 차이가 없다는 것을 내 자신의 뷰를 지원합니다
SELECT * FROM tableA WHERE EXISTS (SELECT * FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT y FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT 1 FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT NULL FROM tableB WHERE tableA.x = tableB.y)
회의 내부 개발자에 1 선택은 따라서 성능을 아프게 가서 * 선택을 모든 (불필요한) 데이터를 선택하는 방법이라고 주장 할 때 그러나 오늘은 얼굴을 맞대고 반대 주장에왔다.
나는 Oracle 또는 이것이 사실 무언가의 일부 이전 버전 있다는 것을 기억하는 것,하지만 난 그에 대한 참조를 찾을 수 없습니다. 그래서, 궁금 해요 -이 연습은 어떻게 태어나? 이 신화는 어디에서 유래 했는가?
추가 : 어떤 사람들이 실제로 여기에 잘못된 믿음이라고 증거를 가지고 주장 때문에 - 사람들의 쇼 충분히 그래서 그것을 말하는 구글 쿼리를. 당신이 너무 게으른 경우, 한 사람은 심지어 그들이 동일하다는 것을 찾기 위해 실행 계획을 비교이 직접 링크를 확인하십시오.
해결법
-
==============================
1.귀하의 질문의 주요 부분은 - "여기서이 신화에서 왔는가?"
귀하의 질문의 주요 부분은 - "여기서이 신화에서 왔는가?"
그래서 대답을, 나는 사람들이 SQL을 배우는 첫 공연 힌트 중 하나를 추측 선택 * 대부분의 상황에서 비효율적이라는 것이다. 그것은이 특정 상황에서 비효율적이라는 사실 때문에 다소 카운터 직관적이다. 그 사람들이 그것에 대해 회의적인 것은 놀라운 일이 아니다 그래서. 그러나 몇 가지 간단한 조사 또는 실험은 대부분의 신화를 추방하기에 충분합니다. 인간의 역사 좀 보여 주지만 신화는 추방 매우 어려운 것이다.
-
==============================
2.데모, 이러한 시도
데모, 이러한 시도
SELECT * FROM tableA WHERE EXISTS (SELECT 1/0 FROM tableB WHERE tableA.x = tableB.y) SELECT * FROM tableA WHERE EXISTS (SELECT CAST('bollocks' as int) FROM tableB WHERE tableA.x = tableB.y)
이제 ANSI 표준을 참조하십시오. ANSI-92, 페이지 (191), 케이스 (3A)
If the <select list> "*" is simply contained in a <subquery> that is immediately contained in an <exists predicate>, then the <select list> is equivalent to a <value expression> that is an arbitrary <literal>.
(가) EXISTS 절에 마지막으로 대부분의 RDBMS의 동작은 *을 무시해야합니다. 이 질문에 어제 (SQL 서버 2005 - 삽입하지가 존재하는 경우)에 따라이 SQL 서버 2000에서 작업을하지 않습니다하지만 난 그게 SQL Server에서 수행 알고 2005 +
-
==============================
3.그는 일반적으로 사용 1을 선택하는 이유 쿼리 최적화 팀에서 SQL 서버 코너 커닝햄를 들어 설명
그는 일반적으로 사용 1을 선택하는 이유 쿼리 최적화 팀에서 SQL 서버 코너 커닝햄를 들어 설명
편집 : 나는이 대답을 게시하고 SELECT 1이 열 확장을 피하지 않는다는 결론에 도달하기 때문에 일부 자세하게 살펴 보았다 그러나. 여기에 전체 세부 사항.
-
==============================
4.이 질문은 실제로 SELECT 절의 분야를 무시하지 않았다 MS 액세스의 일부 버전이었다라는 답이있다. 나는 몇 가지 액세스 개발을 완료했고, 나는 이것이의 원인이 될 나에게 매우 보인다 있도록 SELECT (1) 가장 좋은 방법은이라고 들었다 "신화."
이 질문은 실제로 SELECT 절의 분야를 무시하지 않았다 MS 액세스의 일부 버전이었다라는 답이있다. 나는 몇 가지 액세스 개발을 완료했고, 나는 이것이의 원인이 될 나에게 매우 보인다 있도록 SELECT (1) 가장 좋은 방법은이라고 들었다 "신화."
SQL의 성능은 사용 변종이 존재
from https://stackoverflow.com/questions/6137433/where-does-the-practice-exists-select-1-from-come-from by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MSSQL 정규 표현식 (0) | 2020.06.10 |
---|---|
[SQL] 왜 PL SQL 익명 블록이 완료 출력 없음? [복제] (0) | 2020.06.10 |
[SQL] 업데이트 문에서 중복 데이터 (0) | 2020.06.10 |
[SQL] 문자열 SQL 서버에서 번호 제거 (0) | 2020.06.10 |
[SQL] 오라클 DATEADD () 함수에 대한 해당 (0) | 2020.06.10 |