2014-04-21 3 views
1

2 개의 다른 데이터베이스 (내 로컬 컴퓨터와 생산 시스템)에서 동일한 MySQL SQL 문을 실행했습니다. 로컬 컴퓨터의 속도가 빨라지는 반면 프로덕션 속도는 느립니다. 다음은 각각에 대한 EXPLAIN 결과입니다.mysql이 동일한 쿼리에 대해 2 개의 다른 서버에서 2 개의 다른 결과를 표시하는 이유

로컬 컴퓨터 enter image description here

생산 기계 enter image description here

I가없는 경우 차라리 정확한 쿼리를 게시 할 것입니다.

2 사이의 유일한 차이점은 프로덕션 서버가 5.5를 실행하는 동안 내 로컬 컴퓨터가 버전 5.6을 실행하고 있다는 것입니다. 또한 내 서버의 데이터는 3 일이 경과되어 많은 레코드가 아닙니다. 특히, 한 행의 유형이 "ref"를 읽고 다른 하나가 "ALL"을 읽고 28k 행의 차이가 읽히는 설명의 행 2를보고 있습니다. 2 개 구조 사이의 유일한 차이점은 내가 먼저 주석으로이 있었습니까

+1

은 정말 답을주고 여기에 충분한 정보가 확실하지 않다 - 가능한 답을 넘어 당신은 이미 귀하의 질문에 포함되어 있습니다. – Nathan

+1

웹에서 한번도 만난 적이없는 사람들이 두 서버에서 데이터가 동일하다고 생각하는 이유는 무엇입니까? 분명히,'explain'은 행의 수에 대한 견적/계산이 다르므로 설명은 데이터가 다르다는 것입니다. –

+0

당신의 데이터베이스가 다른 테이블 구조를 가지고 있거나 서로 다른 데이터를 가지고 있거나 데이터의 크기가 실행 계획에 영향을 미칠 수 있다고 생각합니다. –

답변

2

MySQL 5.5 및 이전 버전에서 파생 테이블 에는에 인덱스가 없었습니다. 파생 테이블에 액세스 할 수있는 유일한 방법은 전체 검색이었습니다. (즉. 당신은 5.5 서버에서 EXPLAIN 출력에서 ​​볼 수있는 ALL의) MySQL은 5.6.3로

, MySQL의 성능을 향상시킬 수있는 파생 테이블에 인덱스를 추가 할 수있는 기능이 있습니다. (5.6 서버의 EXPLAIN 결과에서 인덱스의 이름은 <auto_key1>입니다.

참조 : https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html

+0

DB를 5.6으로 업그레이드하고 쿼리 속도가 향상되는지 확인합니다. – Andrew

+0

업그레이드가 그랬습니다. 감사. – Andrew

0

쿼리에서 사용되지 않는들은 timemodified 필드를,하지만 난 그것도

테이블 :-) 대답이라고 생각 구조는 동일 할 수 있지만 데이터는 그렇지 않을 수 있습니다.

테이블의 행 수가 실행 계획에 영향을줍니다.

관련 문제