큰 ID 목록을 검색하려면 쿼리를 작성해야합니다.
우리는 많은 백엔드 (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...)를 지원하므로 표준 SQL을 작성해야합니다.
ID 세트의 크기가 클 수 있으며 쿼리는 프로그래밍 방식으로 생성됩니다. 그렇다면 가장 좋은 방법은 무엇입니까?
1) IN을 사용하여 쿼리 작성
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
내 질문은 여기입니다. n이 매우 큰 경우 어떻게됩니까? 또한 성능은 어떻습니까?
2) OR를 사용하여 쿼리 작성
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
이 접근법에는 n 제한이 없다고 생각하지만 n이 매우 큰 경우 성능은 어떻습니까?
3) 프로그래밍 솔루션 작성 :
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
데이터베이스 서버가 네트워크를 통해 쿼리 될 때이 접근 방식에 일부 문제가 발생했습니다. 일반적으로 작은 결과를 많이 만드는 것보다 모든 결과를 검색하는 하나의 쿼리를 수행하는 것이 좋습니다. 어쩌면 내가 틀렸을 수도 있습니다.
이 문제에 대한 올바른 해결책은 무엇입니까?
IN
!를 사용하여 80ms로 줄었습니다 . 나는 당신의 솔루션 1 + 3으로 내 것을했습니다. 마지막 쿼리는 실행하기 위해 SQL로 전송 된 하나의 긴 쿼리 문자열이었습니다.