복붙노트

[SQL] MySQL은 "선택은 MAX_JOIN_SIZE 행보다 더 많은 검토 것"

SQL

MySQL은 "선택은 MAX_JOIN_SIZE 행보다 더 많은 검토 것"

나는 PHP와 MySQL을 사용하고 있습니다. 내 프로그램에서 조인 포함하는 선택 쿼리가있다. 내가 그것을 실행하면 로컬 호스트에서이 벌금을 일하고 있지만 때 나는 내 서버에 업로드하고 다음 오류가 발생하는 경우 다음을 실행하려고 :

선택은 MAX_JOIN_SIZE 행 이상을 검사 할; 확인 당신의 SQL_BIG_SELECTS가 SELECT 괜찮 = 1 SET SQL_MAX_JOIN_SIZE = # 경우 사용 SET

나는이 문제를 어떻게 해결할 수 있습니다?

해결법

  1. ==============================

    1.PHP를 사용하는 경우, SQL_BIG_SELECTS = 1 주 쿼리 전에 별도의 쿼리에서 설정해야합니다. 예를 들면 :

    PHP를 사용하는 경우, SQL_BIG_SELECTS = 1 주 쿼리 전에 별도의 쿼리에서 설정해야합니다. 예를 들면 :

    $mysqli = new mysqli("localhost", "root", "password", "db"); 
    
    $mysqli->query("SET SQL_BIG_SELECTS=1");  //Set it before your main query
    
    $results = $mysqli->query("SELECT a, b, c FROM test");
    while($row = $results->fetch_assoc()){
        echo '<pre>';
        print_r ($row);
        echo '</pre>';
    }
    
  2. ==============================

    2.이전 당신의 선택을 실행하는 쿼리로 실행 해보십시오 :

    이전 당신의 선택을 실행하는 쿼리로 실행 해보십시오 :

    SET SQL_BIG_SELECTS=1
    

    이건 정말 큰 데이터 세트를 통해 실행되어 있습니까? 이것은 다른 방법으로 해결해야하는지 없습니다.

  3. ==============================

    3.매개 변수의 효과는 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_join_size에 설명되어 있습니다.

    매개 변수의 효과는 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_join_size에 설명되어 있습니다.

    (쿼리의 각 부분에 관여 적은 기록이 그래서) 당신은 더 엄격하게 참여 레코드를 필터링합니다. 간단한 절과 가장 기록을 필터링 할 수있는 테이블 수 시작합니다.

  4. ==============================

    4.저도 같은 문제로 실행했습니다. 놀랄 그래서 그것의 드루팔 사이트가 이상 떨어졌다.

    저도 같은 문제로 실행했습니다. 놀랄 그래서 그것의 드루팔 사이트가 이상 떨어졌다.

    그것은 오래 된 스타일의 쿼리, 표 1, 표 2에서 예를 선택 ㅋ, 표 3 곳 table1.id = table2.id 그리고 table2.some = '일'이었다

    @VolkerK 말한다 같이, 용액이 이동할 어디에 표 2에 표 1과 일치하는 그 전에 여과하여 표 2의 결과 (효과적으로는 절 가입)을 따라서, 표 1에 표 2에서 일치시킬 필요가 기록의 양을 감소시키는 것을 절.

  5. ==============================

    5.나를 위해 솔루션은이 일치시키는 데 사용 조인 모든 컬럼에 인덱스 키를 추가하는 것이 었습니다.

    나를 위해 솔루션은이 일치시키는 데 사용 조인 모든 컬럼에 인덱스 키를 추가하는 것이 었습니다.

  6. ==============================

    6.당신이 PDO 드라이버를 사용하는 경우 새 데이터베이스 핸들을 구성 할 때, 당신의 driver_options 배열의 PDO :: MYSQL_ATTR_INIT_COMMAND 설정

    당신이 PDO 드라이버를 사용하는 경우 새 데이터베이스 핸들을 구성 할 때, 당신의 driver_options 배열의 PDO :: MYSQL_ATTR_INIT_COMMAND 설정

    그래서 같은 :

    $dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION SQL_BIG_SELECTS=1'));
    
  7. from https://stackoverflow.com/questions/943423/mysql-the-select-would-examine-more-than-max-join-size-rows by cc-by-sa and MIT license