Nếu bạn có các giá trị trong một bảng và cột được lập chỉ mục , tôi sẽ hy vọng nó sẽ hiệu quả hơn so với việc sử dụng danh sách các giá trị. Lưu ý rằng có một số cách để làm điều này - đặc biệt là vì loại truy vấn ( WHERE c IN (SELECT c FROM x)
) này không được tối ưu hóa hoàn toàn trong một số phiên bản MySQL không quá cũ:
SELECT a FROM b WHERE c IN ( SELECT c FROM x ) ;
Bạn có thể viết lại (nếu x (c)
không có NULL
giá trị) là:
SELECT a FROM b WHERE EXISTS ( SELECT 1 FROM x WHERE x.c = b.c ) ;
hoặc (nếu x (c)
có các giá trị duy nhất) là:
SELECT b.a FROM b JOIN x ON x.c = b.c ;
Vì vậy, bây giờ bạn có 4 phiên bản để thử nghiệm. Tất nhiên, hành vi thực tế phụ thuộc vào một số yếu tố khác (ngoài truy vấn, lập chỉ mục, phiên bản) như kích thước bảng, phân phối giá trị, cài đặt mysql, bộ nhớ có sẵn, các truy vấn khác đang chạy, giai đoạn mặt trăng, hiệu quả đĩa, v.v.
Trong tất cả, điều tốt nhất để làm là kiểm tra trong môi trường của bạn, tất cả các tùy chọn có sẵn và chọn những gì phù hợp nhất với bạn.