Khi bạn quan tâm đến thuật toán, câu hỏi của bạn dường như trở nên sôi nổi là sự khác biệt giữa IN
và EXISTS
vì hai ví dụ của bạn là cùng một lưu cho IN
thay đổi thành EXISTS
trong phần xóa khỏi CHILD
bảng.
Đã có khá nhiều bài viết về sự khác biệt này trong những năm qua nhưng về bản chất là IN
thường được sử dụng khi số lượng trình so sánh ít trong khi EXISTS
hiệu quả hơn đối với các truy vấn con trả về số lượng lớn hơn các trình so sánh (đặc biệt nếu các giá trị đó chứa một số lượng lớn các bản sao).
IN
phải đánh giá mọi bộ so sánh được trả về trong khi EXISTS
hài lòng khi nó gặp trận đấu đầu tiên.
Có những ngoại lệ cho điều này và nếu bạn tìm kiếm chúng thì bạn sẽ tìm thấy chúng nhưng nhìn chung thì điều này có vẻ đúng.
Tom Kyte (VP Oracle) có một câu trả lời rất hay kèm theo lời giải thích ở đây: http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074
TechRepublic cũng có một lời giải thích hay ở đây: http://www.techrepublic.com/article/oracle-tip-und hieu-the-difference-between-in-and-exists-in-subqueries/5297080
Hy vọng điều này sẽ giúp ...