2010-12-07 3 views
2

제목 자체에 대한 설명입니다. 첫 번째 질의 -이 두 쿼리의 차이점은 무엇입니까

SELECT * 
FROM  table _t 
WHERE  (id1, id2, id3, id4) <> (x1, x2, x3, x4) 

두 번째 쿼리 -이 두 쿼리의 차이점은 무엇

SELECT * 
FROM  table_t 
WHERE  NOT 
      (id1 = x1 AND 
      id2 = x2 AND 
      id3 = x3 AND 
      id4 = x4) 

(즉, 어떤 성능 이득/손실 또는 뭔가가있다)?

내가 농담이나 무엇인가하고 생각하는 모든 사람들에

편집, 난 그냥 PostgreSQL의 8.4에서 두 쿼리를 사용했다고 말하고 싶습니다. 두 쿼리 모두 괜찮습니다..

+0

Yikes! 나는 첫 번째 구문을 알지 못했다. 이 MySQL인가요? – ClosureCowboy

+0

성능 차이는 데이터베이스 엔진에 따라 다를 수 있습니다. –

+1

@Lieven - 행 생성자라고 불립니다. 그들은 표준 SQL을 사용하고 MS SQL Server로 점차적으로 들어가 있습니다. 예를 들어 행 생성자를 사용하여 INSERT의 VALUES 절에 여러 행을 지정할 수 있습니다. –

답변

1

나는 두 쿼리간에 차이점이있을 것으로 기대하지 않지만 실제로는 DBMS 최적화 도구에 의존합니다. 이러한 양식 중 하나가 옵티마이 저가 다른 양식에없는 색인을 사용할 수있는 기회를 "보지 못하게"할 수 있습니다.

@Jinesh가 말했듯이, DBMS에서 사용할 수있는 기능을 사용하면 옵티마이 저가 이러한 경우에 생성하는 계획을 조사하는 것이 좋습니다.

2

사용자 찾을 계획을 설명합니다.

+1

+1하지만 Postgres가 똑같은 실행 계획을 사용하기에 충분히 똑똑 할 것이라고 –

+0

@a_horse_with_no_name : 절대적으로 옳습니다. 동일하게 사용합니다 이 두 가지 쿼리에 대한 실행 계획 –

1

idx에 인덱스가있는 경우 성능이 변경됩니다.

+0

죄송합니다. 첫 번째 쿼리는 정상적으로 작동합니다. –

관련 문제