Tôi cần phải viết một truy vấn để lấy một danh sách lớn các id.
Chúng tôi hỗ trợ nhiều phụ trợ (MySQL, Firebird, SQLServer, Oracle, PostgreQuery ...) vì vậy tôi cần viết một SQL chuẩn.
Kích thước của bộ id có thể lớn, truy vấn sẽ được tạo theo chương trình. Vì vậy, cách tiếp cận tốt nhất là gì?
1) Viết truy vấn bằng IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Câu hỏi của tôi ở đây là. Điều gì xảy ra nếu n rất lớn? Ngoài ra, những gì về hiệu suất?
2) Viết truy vấn bằng OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Tôi nghĩ rằng cách tiếp cận này không có giới hạn n, nhưng hiệu suất nếu n rất lớn thì sao?
3) Viết một giải pháp lập trình:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Chúng tôi gặp một số vấn đề với cách tiếp cận này khi máy chủ cơ sở dữ liệu được truy vấn qua mạng. Thông thường tốt hơn là thực hiện một truy vấn truy xuất tất cả các kết quả so với thực hiện nhiều truy vấn nhỏ. Có lẽ tôi sai.
Điều gì sẽ là một giải pháp chính xác cho vấn đề này?
IN
! Tôi đã thực hiện như một giải pháp của bạn 1 + 3. Chỉ cần truy vấn cuối cùng là một, chuỗi truy vấn dài được gửi tới SQL để thực thi.