2011-08-11 2 views
1

저는 다른 이유로 더 작은 테이블로 분할해야하는 꽤 큰 DB 테이블을 가지고 있습니다.255 행을 삽입 한 후 MySQL이 멈 춥니 다.

처리는이 예에 가까운 PHP를 통해 발생합니다

// Note: It's an example and not working code - the actual function is much larger 
function split_db() 
{ 
    $results = " 
     SELECT * 
     FROM big_table 
    "; 

    foreach ($results as $result) 
    { 
     // Here I split the big_tables contents and ... 
     $some_val = $result->SomeVal; 
     // ... 
     $another_val = $result->AnotherVal; 

     // ... here I insert the contents in the different tables 
     $sql = " 
      INSERT 
      INTO first_small_table 
      // ... 
      VALUES 
      // ... 
     "; 
    } 
} 

문제 : 쿼리가 255 행, 내가 로컬 환경에서 사용하거나 테스트 서버에있어 경우에 상관없이 삽입.

질문 : 왜? 나는 무엇을 잘못하고 있는가, 아니면 무엇인가 놓치고 있는가? 그리고 어떻게 이것을 피할 수 있을까요?

정보에 대한 MySQL의 - 클라이언트 버전 :

  • 데브 - 서버 : 5.0.32,
  • 지역 데브 - 봉투 : 5.1.41

나는 MySQL-Hero가 아니기 때문에, 도움과 설명은 Google이 (나에게) 의미있는 것을 가져다주지 않으므로 인정된다. 감사!

+0

'SELECT * FROM big_table'하면 모든 행이 반환됩니까? –

+0

@ Mahdi.Montgomery 네, 그렇습니다. – kaiser

답변

7

unsigned tinyint 유형의 기본 키가 있으며 최대 값은 255입니다.

그러니 그냥 int

ALTER TABLE first_small_table MODIFY id INT; 
+0

'ID tinyint (15) UNSIGNED NOT NULL AUTO_INCREMENT'와'PRIMARY KEY (ID)'입니다. 무슨 일이 있었는지 설명해 주시겠습니까? – kaiser

+0

@kaiser :'UNSIGNED''tinyint'는 간격 0..255에 숫자를 저장할 수 있습니다. 'int '로 바꿔야합니다 – zerkms

+0

@ 카이저 : 타입을 적절하게 바꾸는 명령으로 답변을 업데이트했습니다 – zerkms

5

난 당신이 255 개 행으로 제한하는 이유를 말할 수 없다로 변경,하지만 내가 말할 수있는 것은 당신이에서 행을 추가 단일 쿼리를 할 수있는 당신의 INSERT INTO ... SELECT 쿼리와 작은 테이블에 큰 테이블 : 당신이 PHP를 사용할 필요가없는 경우

INSERT INTO first_small_table (col1, col2, col3) 
SELECT col1, col2, col3 
FROM big_table; 

, 모든하여 사용하지 않는 의미. SQL 만 사용하는 것이 더 빠릅니다.

+0

- 슬프게도 - 이걸 PHP로 작성해야합니다. 그러나 +1 어쨌든 :) – kaiser

+0

@ 카이저 : 왜 특별한 이유가 있습니까? –

+0

나는 클라이언트 서버를 만지는 사람이 아니다. 또한 다음 버전을 개발할 기회가되지 않을 것입니다. 기타 많은 이유가 있습니다 ... – kaiser

관련 문제