2011-01-21 2 views
3

최근 데이터베이스 테이블을 MYISAM에서 INNODB으로 바 꾸었습니다. 대부분 쿼리에 시간이 초과되었습니다. 대부분 삽입됩니다. 이전에 사용한 함수 중 하나는 2 초 동안 ~ 30 개의 MYISAM 테이블에 걸쳐 많은 레코드 컬렉션을 삽입, 삭제 및 업데이트했지만 INNODB이므로 PHP 시간 초과가 발생합니다.MYISAM 성능과 비교하여 INNODB 쿼리의 속도를 높이려면 어떻게해야합니까?

시간 초과가 60 초로 설정되었습니다. 지금까지는 많은 쿼리가 있지만 여러 스크립트 (여러 삽입, 다중 삭제 등)가 결합되어 스크립트의 크기가 25 초 정도 걸리므로 현재 스크립트를 최적화했습니다. 최소 60 초.

이전에 MYISAM을 사용했을 때이 지속 시간이 10 배 이상 빨라졌습니다. 이러한 쿼리를 처리하는 과정에서 실수가있을 수 있습니까? 또는 성능을 지원할 수있는 설정이 있습니까? 현재 MySQL은 설치의 기본 설정을 사용하고 있습니다.

쿼리는 특별한 것이 아니며 INSERTUPDATE 쿼리와 마찬가지로 DELETE ... WHERE ... 단순 논리입니다.

+0

테이블 정의를 게시 할 수 있습니까? –

답변

2

환경에 대해 너무 많이 알지 못해도 말하기는 어렵지만 데이터베이스 튜닝 문제가 더 많을 수 있습니다. InnoDB는 모든 쓰기가 참으로 플러시되는 예산 하드웨어에서 매우 느릴 수 있습니다. (이되지 읽기, 쓰기에 영향을 미칩니다.)

예를 들어, 같은 옵션을 읽을 할 수 있습니다 : 당신이 상당히 응용 프로그램을 빠르게 할 수있다 홍조를 피함으로써

innodb_flush_log_at_trx_commit=2 
sync_binlog=0 

만에 서버가 손상되면 잠재적 인 데이터 손실 비용.

데이터 손실이 절대적으로 존재할 수없는 것이면 다른 옵션은 더 나은 하드웨어를 사용하는 것입니다.

0

는 이노 디비는 BTREE 인덱스를 전달하고 각 쿼리에 대한

+0

InnoDB는 BTREE 인덱스만을 사용한다. http://dev.mysql.com/doc/refman/5.0/en/create-index.html (주석 바로 위) –

+0

InnoDB 스토리지 엔진은 항상 테이블에 대한 B-Tree 인덱스를 구성하지만, 그것이 성능을 향상시킬 것이라고 믿는다면 적응 형 해시 인덱스를 생성하십시오. http://dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html –

1

빠른 실행 explain이다 해시를 사용하여 인덱스에 의해 조회 속도를하는 데 도움이 해시 인덱스를 작성합니다. 즉, 느린 쿼리가 select foo from bar; 인 경우 explain select foo from bar;을 실행합니다.

계획을 검사하고 필요에 따라 색인을 추가하십시오. 설명을 다시 실행하고 인덱스가 사용되고 있는지 확인하십시오.

+0

"계획"부분은 어디에서 받았습니까? – zerkms

+0

EXPLAIN PLAN FOR은 Oracle 구문입니다. MySQL에서는 EXPLAIN을 사용하여 쿼리의 접두어를 붙입니다. –

+0

그래, 나쁘다, 미안. 나는 최근에 MySQL보다 오라클을 더 많이 해왔다. :) – tpdi