2011-01-24 3 views
0

2 개의 데이터베이스가 있습니다. localhost & remotehost. Localhost는 잘 작동하는 것처럼 보이고 신속하게 내 결과를 얻습니다 (이 보드의 도움 덕분에 1 초 미만입니다). mysqldump를 사용하여 localhost를 원격 호스트에 덤프했다 (테이블 구조, 인덱스, & 데이터 포함). remotehost가 localhost의 가상 복제본이 될 것으로 예상했지만 remotehost에서 쿼리를 실행하면 실행 시간이 1 분을 넘습니다. Explain 문은 다른 점이 있습니다 ... '유형'을 '범위'로 변경하고 사용 된 색인을 포함하여 다른 점이 많이 있습니다. 동일한 데이터베이스이지만 다른 Explain 결과

(이 중 일부는 아마 PRIMARY 인덱스를 사용하도록 강제로 고정 할 수 있지만, 차라리 문제의 근본에 도착하고 REMOTEHOST 다르게 작동 이유를 알 것)

내 진술 :

SELECT names.id, names.first, addr.last FROM names, addr WHERE names.first LIKE 'H%' AND addr.last IS NOT NULL AND names.id = addr.id GROUP BY names.id LIMIT 10 

는 로컬 호스트에서 문을 EXPLAIN :

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|index|PRIMARY,first |PRIMARY|4  |NULL    |448 |Using where 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

REMOTEHOST에서 문을 EXPLAIN :

01 23,516,
id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|range|PRIMARY,first |first |903 |NULL    |955 |Using where; Using temporary; Using filesort 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

UPDATE :

Localhost is using mysql version 5.1.46-log. 
Remotehost is using mysql version 5.0.91-log. 
+0

이 질문은 프로그래밍 관련 질문이 아니기 때문에, ServerFault로 옮기기에 투표를하십시오. –

+0

제발하지 마세요 .... 이것은 무엇보다 mysql 질문입니다. 이 보드에 더 많은 MySQL 전문가가있는 것 같습니다. –

+0

my.cnf 파일을 비교하여 remotehost에서 잘못 설정되지 않았는지 확인하십시오. 이미 확인한 것 같지만 remotehost에 addr.id에 색인이 있는지 확인하십시오. 또한 "테이블 이름 최적화"를 실행 해보십시오. 통계를 업데이트하려면 remotehost에서. 그렇게 할 필요는 없지만, 그 밖의 무엇을 제안해야할지 모르겠습니다. –

답변

0

두 데이터베이스 모두에 대해 mysqldump --no-data 출력을 게시 하시겠습니까? 아마도 그들은 다른 로케일, ISAM 유형, 다른 옵션 등을 사용하고있을 것입니다.

+0

나는 두 서버 모두에서 실행했고 두 엔진은 동일합니다 ... 엔진, 인덱스 키 등등 .... –

+0

아이디어가없는 것처럼 보입니다. 내가 보는 유일한 방법은 상당히 짐승이다. 정보를 디버깅하여 MySQL 빌드를로드하고 gdb를 연결하고 쿼리 계획 결정을 추적한다. – GreyCat

0

실행 SHOW는 각 테이블에 테이블을 만들고 차이를 찾습니다. 가장 먼저 생각한 점은 InnoDB가 활성화 된 서버와 그렇지 않은 서버가 하나이므로 저장소 엔진이 다릅니다. 그런 다음 my.cnf 및 SHOW VARIABLES에서 차이점을 확인하십시오.

또한 두 개의 데이터베이스에 다른 수의 행이있는 것으로 보입니다. 이는 플래너가 쿼리를 실행할 때 사용하기로 결정한 인덱스에 영향을 미칠 수 있습니다.

+0

동일한 수의 행이 있습니다 ... 두 서버가 서로 다른 인덱스를 사용하고 있기 때문에 그 이유가 보이는 이유는 ...이라고 생각합니다. 나는 당신의 쇼를 테이블에 만들 것입니다. –

+0

쇼 만들기 테이블을 실행했고 그들은 똑같습니다 ... 둘 다 MyISAM db를 사용하고 있습니다 ... 인덱스를 포함한 모든 것들도 100 % 같은 것입니다 ... 이상한 –