codememo

MySQL IN 절: 최대 인수 수

tipmemo 2023. 10. 15. 17:23
반응형

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

반응형