2010-12-16 7 views
1

오늘 MySQL 성능 문제를 해결하기 위해 노력하고 있습니다. EXPLAIN을 사용하여 테이블 스캔을 찾고 색인을 작성하여 일부 문제를 해결했습니다.MySQL, 인덱스 및 "대기 대기 시간 초과"

내 읽기가 빠르기 때문에 읽습니다.

그러나 업데이트 쿼리는 매우 문제가 있습니다. MySQL을 다시 시작하면 처음 몇 개의 삽입 또는 업데이트가 제대로 작동합니다. 그런 다음 업데이트 쿼리에서 60 초 후에 "잠금 대기 시간 초과가 초과되었습니다. 트랜잭션을 다시 시작하십시오"오류가 표시됩니다.

MySQL은 모든 삽입/업데이트에서 큰 인덱스를 다시 생성합니까? 이 문제를 어떻게 해결할 수 있습니까?

답변

1

예, MySQL은 모든 업데이트에 대해 색인을 다시 만듭니다. 너는 달콤한 자리를 찾아야 해. WHERE 조건에서 사용되는 키에만 인덱스를 넣거나 (ON 조건을 조인하십시오).

색인을 생성하면 업데이트 속도가 너무 느려집니다. 아무 것도 색인하지 않으면 읽기가 너무 느립니다.

색인을 원하는 범위로 좁히고 성능 문제가 계속 발생하면 데이터 구조를 다시 평가해야합니다.

+0

나는 당신이 말하는 것을 exacly했다. EXPAIN이 테이블이 행을 스캔하고 있다고 지적한 후에 where 절 또는 on 조건에있는 열에 대해서만 인덱스를 만들었습니다. – koen

+0

그래, 우리는 더 도움이 테이블 구조에 대한 자세한 정보를 볼 필요가 있습니다. – Stephen