Sql tồn tại vs
Giải quyết vấn đề trong TSQL có sẵn thông qua các phương pháp khác nhau và có thể thấy kết quả mong muốn bằng cách sử dụng bất kỳ phương pháp nào. Một trong những cách mà kết quả cuối cùng có thể đạt được là thông qua việc sử dụng các mệnh đề IN và EXISTS. Việc sử dụng các mệnh đề giúp lọc tập kết quả có tham chiếu đến một truy vấn con có sẵn. Việc thực hiện IN và EXISTS hơi khác nhau và chính những khác biệt này được đánh giá.
Có nhiều yếu tố khác nhau quyết định việc IN hay EXISTS sẽ được triển khai hay không. Một trong số đó là lượng dữ liệu có sẵn trong bảng. Một lượng lớn kết quả dữ liệu trong máy chủ SQL quay trở lại sử dụng quét chỉ mục thay vì sử dụng Tìm kiếm chỉ mục.
Sự khác biệt
Các số liệu thống kê được đưa ra cũng cho biết rất nhiều về kế hoạch thực hiện nên được tuân theo. Sự khác biệt được thể hiện khi máy chủ đã tích lũy đủ số liệu thống kê để đưa ra quyết định hợp lệ và khi không có số liệu thống kê lần đầu tiên. Phần cứng được sử dụng cũng xác định liệu IN hoặc EXISTS sẽ được sử dụng. Điều này phần lớn phụ thuộc vào số lượng CPU có sẵn.
EXISTS được chạy khi có nhu cầu khớp kết quả của truy vấn với truy vấn con khác. Mặt khác, IN được sử dụng khi truy xuất các giá trị của các cột cụ thể nằm trong danh sách. Quyết định sử dụng chỉ dựa trên sự phù hợp, tức là khi bạn cảm thấy rằng việc sử dụng nó là phù hợp.
Trong trường hợp truy vấn con được sử dụng và giá trị null được trả về, toàn bộ câu lệnh sẽ trở thành NULL. Điều này có hiệu lực chỉ ra việc sử dụng từ khóa EXISTS. Việc sử dụng từ khóa IN xuất hiện khi cần so sánh các giá trị khác nhau trong các truy vấn con. Từ khóa EXISTS chủ yếu được sử dụng để đánh giá các câu lệnh đúng hoặc sai và IN được sử dụng trong hầu hết các câu lệnh truy vấn con tương ứng.
Nói chung, EXISTS sẽ nhanh hơn IN, lý do là khi EXISTS được chạy, tìm kiếm đã tìm thấy một điểm nhấn và sẽ xem xét liệu điều kiện đã được chứng minh là đúng hay chưa. Khi chạy IN, nó thu thập tất cả các kết quả từ truy vấn con và trình bày chúng để xử lý thêm và quá trình này mất một lúc.
Điều quan trọng cần lưu ý là việc thực hiện truy vấn phải được thực hiện đúng và được kiểm tra trước khi chạy. Không đảm bảo rằng truy vấn là kết quả chính xác cho EXISTS và IN trình bày các giá trị khác nhau và đây không phải là mục đích sử dụng của chúng trong máy chủ SQL. Trình tối ưu hóa phải luôn tối ưu khi hoạt động như bình thường.
Tóm lược
Giải quyết vấn đề trong TSQL thường được thực hiện với EXISTS và IN.
Sự khác biệt nhỏ được quan sát thấy khi triển khai EXISTS và IN, mặc dù tối ưu hóa cho mỗi cái sẽ cho cùng một giá trị.
Thống kê là một trong những yếu tố quyết định liệu EXISTS hay IN sẽ được triển khai
Phần cứng đang sử dụng cũng rất quan trọng trong việc xác định xem EXISTS hay IN sẽ được triển khai
Việc chạy EXISTS sẽ hữu ích khi cần tương quan kết quả của một truy vấn đã cho với một truy vấn con khác. EXISTS cũng rất phổ biến khi đánh giá đúng hoặc sai cần đánh giá.
IN thường được sử dụng khi có nhu cầu truy xuất các cột cụ thể trong danh sách. Ngoài ra, nó thường được sử dụng khi cần so sánh giá trị trong các truy vấn con.
EXISTS thường nhanh hơn IN khi nó chạy, tìm thấy một điểm nhấn và xem xét liệu điều kiện đã được chứng minh là đúng
IN chậm hơn vì nó thu thập tất cả các kết quả từ truy vấn con và xử lý nó.
Mặc dù có các cách thực thi khác nhau, tối ưu hóa sẽ cho kết quả tương tự trong EXISTS và IN.