EXIST랑 IN은 사실상 똑같이 동작함.
EXIST IN은 둘다 semi join으로 작동하는데 사실 논리적으로 동치는 아님. right에 null이 들어가 있으면 exist는 false고 in은 null임
하지만 semi join에서 null은 무시되는값이라서 실제로는 semi-join으로 똑같이 치환해서 플랜을 생성한다
단, not in이랑 not exists는 똑같이 동작하지도 않고 논리적으로도 동치도 아니고 심지어 결과값도 차이가 있음
not in은 na anti-semi join이고 not exists는 anti-semi join으로 플랜이 생성됨.
NA(Null-Aware) anti-semi join은 잘은 모르지만 내부구조상 좆같이 느리므로 사용하는데 문제가 많음.
일반적으로 in ( subquery )를 쓰다가 not붙이면 결과값 반대 아님? 하면서 not을 붙이는데 in 결과값을 반대로 보려면 not exist가 맞다.
성능도 이쪽이 훨씬빠르다.
끗
디비추
님 근데 제가궁금했던게있는데 SQL은 내부적으로 어떤자료구조를 가지고있음? B+트리같은 방식임?
B트리는 인덱스얘기 아님?
디비는 회사마다 다른데 인덱스는 비트리가 제일 많긴함 mysql이나 오라클은 인덱스 종류도 여러개 지원할걸? 내부 데이터는 케바케림 - dc App
Sql은 틀딱기술 개발자가 sql공부하는건 수치다. 몰라도 됨. 디자인패턴을 공부해야한다
-땔-