Giải thích kế hoạch
sẽ chỉ cho bạn lý do chính xác tại sao bạn nên sử dụng Exists
. Thông thường câu hỏi đi kèm Tồn tại so với Đếm (*)
. Tồn tại
nhanh hơn. Tại sao?
-
Đối với các thách thức do NULL đưa ra:khi truy vấn con trả về
Null
, đối với IN toàn bộ truy vấn trở thànhNull
. Vì vậy, bạn cần phải xử lý điều đó. Nhưng sử dụngExist
, nó chỉ là mộtfalse
. Dễ dàng hơn để đối phó. Đơn giản chỉ cầnIN
không thể so sánh bất cứ thứ gì vớiNull
nhưngTồn tại
có thể. -
ví dụ.
Tồn tại (Chọn * từ bảng của bạn trong đó bla ='blabla');
bạn nhận được true / false vào thời điểm một lần truy cập được tìm thấy / khớp . -
Trong trường hợp này
IN
loại chiếm vị trí củaCount (*)
để chọn TẤT CẢ khớp các hàng dựa trênWHERE
bởi vì nó so sánh tất cả các giá trị.
Nhưng cũng đừng quên điều này:
-
TỒN TẠI
thực thi ở tốc độ cao đối vớiIN
:khi kết quả truy vấn con rất lớn. -
IN
đi trướcEXISTS
:khi kết quả truy vấn con rất nhỏ.
Tham khảo để biết thêm chi tiết: