2013-08-29 3 views
0

페이지가로드되기 전에 일부 mysql 행을 복사해야합니다. 임시 테이블에 복사하려고 시도했습니다.mysql 행을 복사하는 가장 빠른 방법은 무엇입니까?

mysqli_query($con,"CREATE TEMPORARY TABLE tmp_tbl SELECT * FROM subject WHERE ID='$ID'"); 
mysqli_query($con,"UPDATE tmp_tbl SET ID=NULL"); 
mysqli_query($con,"INSERT INTO subject SELECT * FROM tmp_tbl"); 
mysqli_query($con,"DROP TABLE tmp_tbl");` 

매우 느립니다. 정기적 인 추악한 방식으로 복사하는 것이 더 빠를 것입니까?

편집 : 여러 행을 업데이트 할 때이 같은 뭔가를해야만 작업을 수행 할 수 있습니다

mysqli_query($con,"INSERT INTO subject (Primary,AnotherID, COLB, COLC) 
SELECT NULL,'$a', COLB, COLC 
FROM subject WHERE AnotherID='$someID'"); 

당신은 기본 키에 널 (null)을 삽입해야합니다, 그렇지 않으면 그 나던 작업

+0

당신의 질문에'explain'의 결과를 확인 했습니까? 게시글에 추가하십시오. –

답변

2

당신은 확실히 할 수 이 속도는 빨라지지만 전체 속도는 subject 테이블의 행 수에 따라 결정됩니다.

INSERT INTO subject (ColA, ColB, ColC) 
SELECT ColA, ColB, ColC 
FROM subject 

의 핵심은 모든 열을 지정하는 것입니다 : 예 나는 subject 테이블 열을 믿고있어 들어

IDColA, ColBColCID 것을는 자동 증가 기본 키 제외/삽입시 ID을 제외합니다.

+0

그리고 하나 이상의 행을 복사해야하는 경우에도 여전히 빠릅니까? –

+0

4 개가 아닌 하나의 명령 만 사용하기 때문에 속도가 빨라집니다. 만약 당신의'subject' 테이블에 많은 행 (수천 개)이 있다면, 현재하고있는 것보다 빠르지 만, 어떻게하는지에 상관없이 수천 개의 행을 복사하는 데 시간이 걸리기 때문에 여전히 느려질 것입니다. –

+0

"Where NotUniqueID = '$ ID'"로 작업하려고하는 중입니다. 행을 몇 개 복사해야하기 때문입니다. 이런 식으로 할 수있는 방법은 없나요? –

관련 문제