복붙노트

[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. ==============================

    1.귀하의 질문의 주요 부분은 - "여기서이 신화에서 왔는가?"

    귀하의 질문의 주요 부분은 - "여기서이 신화에서 왔는가?"

    그래서 대답을, 나는 사람들이 SQL을 배우는 첫 공연 힌트 중 하나를 추측 선택 * 대부분의 상황에서 비효율적이라는 것이다. 그것은이 특정 상황에서 비효율적이라는 사실 때문에 다소 카운터 직관적이다. 그 사람들이 그것에 대해 회의적인 것은 놀라운 일이 아니다 그래서. 그러나 몇 가지 간단한 조사 또는 실험은 대부분의 신화를 추방하기에 충분합니다. 인간의 역사 좀 보여 주지만 신화는 추방 매우 어려운 것이다.

  2. ==============================

    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. ==============================

    3.그는 일반적으로 사용 1을 선택하는 이유 쿼리 최적화 팀에서 SQL 서버 코너 커닝햄를 들어 설명

    그는 일반적으로 사용 1을 선택하는 이유 쿼리 최적화 팀에서 SQL 서버 코너 커닝햄를 들어 설명

    편집 : 나는이 대답을 게시하고 SELECT 1이 열 확장을 피하지 않는다는 결론에 도달하기 때문에 일부 자세하게 살펴 보았다 그러나. 여기에 전체 세부 사항.

  4. ==============================

    4.이 질문은 실제로 SELECT 절의 분야를 무시하지 않았다 MS 액세스의 일부 버전이었다라는 답이있다. 나는 몇 가지 액세스 개발을 완료했고, 나는 이것이의 원인이 될 나에게 매우 보인다 있도록 SELECT (1) 가장 좋은 방법은이라고 들었다 "신화."

    이 질문은 실제로 SELECT 절의 분야를 무시하지 않았다 MS 액세스의 일부 버전이었다라는 답이있다. 나는 몇 가지 액세스 개발을 완료했고, 나는 이것이의 원인이 될 나에게 매우 보인다 있도록 SELECT (1) 가장 좋은 방법은이라고 들었다 "신화."

    SQL의 성능은 사용 변종이 존재

  5. from https://stackoverflow.com/questions/6137433/where-does-the-practice-exists-select-1-from-come-from by cc-by-sa and MIT license