대부분의 DBMS는 큰 매개 변수 목록과 함께 작동하지 않습니다. 큰 "IN"목록이있는 경우 (예 : MySQL은 테이블 반환 매개 변수를 가지고 있지 않는 한,
CREATE TABLE baz (
bar VARCHAR
)
INSERT INTO baz(bar) VALUES ('1');
INSERT INTO baz(bar) VALUES ('2');
INSERT INTO baz(bar) VALUES ('3');
INSERT INTO baz(bar) VALUES ('4');
...
INSERT INTO baz(bar) VALUES ('500000');
SELECT *
FROM foo,
baz
WHERE foo.bar = baz.bar
그래서 :
SELECT *
FROM foo
WHERE bar IN ('1','2','3','4'...,'500000')
당신은 당신이 선택하려는 모든 값을 포함하는 테이블을 가지고, 두 테이블을 조인에 비해 매우 저조한 실적을 얻을 것이다 가장 좋은 방법은 쿼리에서 데이터를 입력하는 대신 임시 테이블에 데이터를 저장하는 것입니다. 필터링하는 값 (귀하의 경우에는 agt.item)에 대한 인덱스가 필요함을 잊지 마십시오.
:로
당신은 단지 그것을 다시 할 수있다. 어쨌든 전체 쿼리를 받기 전에 시간이 초과 되었습니까? – sjdaws
나는 십만 *가 더 널리 이해된다고 생각하지만 무례하지만 나는 라크를 편집했다. – George
그것의 시간 초과하지만 구문 오류가 있지만 잘 작동 일부 항목을 제거 말하는. 쿼리에서 큰 데이터를 갖는 이러한 종류의 쿼리를 처리하는 방법을 이해하고 싶습니다. – dsr301