MySQL IN 절: 최대 인수 수
다음과 같은 쿼리가 있다고 가정합니다.
SELECT * FROM table1 WHERE table1.id IN (1, 2, 3, 4, 5, ..., 999999)
의 항목 수에 대한 합리적인 최대값은 얼마입니까?IN조항?스핑크스를 사용하여 전체 텍스트 검색 결과를 생성하고 MySQL 쿼리에 ID를 삽입하고 있습니다.이것이 허용 가능한 방법입니까?
IN 절에서 다음과 같은 쿼리 결과를 가져오도록 할 수도 있습니다.
SELECT * FROM table1
WHERE table1.id IN
(
SELECT id from table2
)
이렇게 하면 가능한 모든 값을 가진 텍스트 문자열을 생성할 필요가 없습니다.
mysql에서는 IN 절에 원하는 만큼의 값을 넣을 수 있어야 하며 "max_allowed_packet" 값에 의해서만 제한됩니다.
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_allowed_packet
MariaDB(제 경우에는 10.3.22)는 구체화된 임시 테이블을 만들기 전에 IN()으로 매개 변수 999개를 제한하여 실행 시간이 훨씬 더 길어질 수 있습니다.지수에 따라 다릅니다.저는 이 행동을 통제할 방법을 찾지 못했습니다.MySQL 5.6.27에는 이 제한이 없으며 적어도 ~1000개의 매개 변수가 없습니다.MySQL 5.7은 동일한 "기능"을 가질 수 있습니다.
저는 결국 여러 가지를 하게 되었습니다.where id = a or id = b ...하지만 그것은 또한 일련의 것들을 사용함으로써 잘 작동합니다.where id in(a, b) or id in(c, d) ....
larabel 행 쿼리를 추가한 다음 추가해야 합니다.NOT IN조건을 다음과 같습니다.
$object->whereRaw('where id NOT IN (' . $array_list . ') ');
이건 내 코드에 맞는 거야, 난 1087개의 기록을 가지고 있어요.
내 경험으로는 조항에서 최대값이 1000개입니다.IN ('1',....,'1000'), 나는 나의 엑셀 시트에 1300 값을 가지고 있고, 나는 그것들을 모두 IN에 넣었고, MySQL은 1000만 반환합니다.
언급URL : https://stackoverflow.com/questions/12666502/mysql-in-clause-max-number-of-arguments
'codememo' 카테고리의 다른 글
| WSAGetLastError()에서 오류 문자열을 검색하려면 어떻게 합니까? (0) | 2023.10.15 |
|---|---|
| 테이블 셀(td)에서 해당 테이블 헤더(th)를 가져오려면 어떻게 해야 합니까? (0) | 2023.10.15 |
| SQLLechemy에서 bulk_update_mapping을 사용하여 서로 다른 값으로 여러 행 업데이트 (0) | 2023.10.15 |
| XMLHtpRequest가 헤더를 추가하지 않음 - "X-Requested-With: XMLHtpRequest" (0) | 2023.10.15 |
| 크롬이 렌더링되지 않음크롬이 렌더링되지 않음태그, FF가 합니다. (0) | 2023.10.15 |