2009-06-02 2 views
0

어느 것이 더 효율적이고 어느 정도입니까?mysql 성능 비교

유형 1 :

insert into table_name(column1,column2..) select column1,column2 ... from another_table where 

columnX in (value_list) 

유형 2 : VALUE_LIST 포함 때

insert into table_name(column1,column2..) values (column1_0,column2_0..),(column1_1,column2_1..) 

초판 짧은 보이지만 제 상당히 길어질 수 있고, 500 개 또는 더 많은 값을 말한다.

그러나 나는 성능이 더 좋아질 것이라고는 생각하지 않지만, 첫 번째가 더 효율적이고 직관적이어야한다고 생각합니다.

답변

2

첫 번째 항목은 특히 이미 열이 이미 mysql에있는 경우 더 명확합니다. 네트워크 오버 헤드에 데이터를 보내고 시간을 분석하는 데 시간을 절약 할 수 있으며 클라이언트의 쿼리 크기 제한을 줄이는 것에 대해 걱정할 필요가 없습니다.

그러나 일반적으로 잘 색인 된 테이블의 경우 행 수가 커질수록 성능이 비슷할 것으로 예상됩니다. 큰 쿼리를 사용하는 삽입에 대한 대부분의 시간은 인덱스 작성과 같은 작업을 수행하는 데 소요되며 (둘 다 here 참조), 선회 색인을 사용하지 않으면 이러한 쿼리를 수행해야합니다.

+0

+1하고 싶지만 666 담당자를 해고하고 싶지는 않습니다. ;) –

+0

아아, 누군가 이미 했어. 이제 나는 아래쪽 투표를해야만한다. –

0

저는 Todd와 동의합니다. 첫 번째 쿼리는 더 깨끗하고 MySQL 서버로 보내고 컴파일하는 것이 더 빠릅니다. 삽입 된 레코드 수가 증가하면 속도 차이가 줄어들 것입니다.

  • 그것은 유지하는 것이 훨씬 더 쉽다 :

    그러나 첫 번째 양식 고려해야 할 중요한 다른 장점이 있습니다 만 모든 이제 다음 필드를 추가하거나 수정해야합니다.

  • another_table을 쿼리하고 결과를 처리하여 두 번째 쿼리 (해당 방법의 숨겨진 비용)를 연결하는 비용을 피할 수 있습니다.
  • 이 업데이트를 두 번 이상 실행해야하는 경우 첫 번째 쿼리를 컴파일 된 폼 및 쿼리 계획과 함께 MySQL 서버에 캐시 할 수 있습니다. 이렇게하면 쿼리의 후속 호출이 조금 더 빠르게 실행됩니다.