Bắt đầu từ một số bản ghi nhất định, IN
vị từ trên SELECT
trở nên nhanh hơn so với danh sách các hằng số.
Xem bài viết này trong blog của tôi để so sánh hiệu suất:
Nếu cột được sử dụng trong truy vấn trong IN
mệnh đề được lập chỉ mục, như thế này:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, thì truy vấn này chỉ được tối ưu hóa thành EXISTS
(sử dụng trừ một mục nhập cho mỗi bản ghi từ table1
)
Thật không may, MySQL
không có khả năng thực hiện HASH SEMI JOIN
hoặc MERGE SEMI JOIN
hiệu quả hơn (đặc biệt nếu cả hai cột đều được lập chỉ mục).