2009-10-09 3 views
1

내 MySQL 테이블 (MyISAM)을 최적화하려고하는데, phpMyAdmin을 사용하여 int에서 smallint, medium int 등으로 일부 열 유형을 변경했습니다. 그 후에 mysql이 실제로 작동을 멈추고 서버로드가 실제로 높아졌습니다. 사이트에서 유지 관리 모드로 설정하고 부하가 떨어질 때까지 기다린 후에도로드가 여전히 미친 상태였습니다. 결국 테이블을 삭제하고 원래의 열 유형으로 다시 작성해야만 원활하게 작업 할 수 있습니다 ... 그래서 열 유형을 변경하기 전과 변경해야 할 특별한 작업이 있습니까?mysql 열 유형을 업데이트하는 데 필요한 절차가 있습니까?

두 개의 서로 다른 열 유형이있는 조인 테이블도 문제가됩니까? I.E. id INT (11)은 MEDIUMINT (8)와 결합합니다. 나는 어느 시점에서 그렇게했다고 생각합니다.

답변

1

당신은 말했다 :

"두 개의 서로 다른 열 유형에서와 합류 테이블이 또한 문제를 만들 즉 아이디 INT (11) MEDIUMINT로 합류 (8) 생각 한 지점에서 내가 그랬어?.."

예. RBDMS는 다른 유형의 2 열을 조인 할 때 다른 열의 유형과 일치하도록 열 중 하나의 모든 값을 즉시 수행하는 변환을 수행해야하기 때문에 성능이 저하 될 수 있습니다 비교. 이런 이유 때문에, 조인 할 컬럼은 항상 같은 타입이어야한다. (InnoDB 테이블 타입을 사용하는 경우) 외래 키도 선호된다.

+1

또한 추가 할 것입니다 : EXPLAIN을 사용하여 열이 조인 된 방법을 확인할 수 있습니다 (아마도 tmp 테이블이 과도하게 사용됩니다) – dusoft

+0

@dusoft Great point. EXPLAIN은 어떤 키가 사용되고 있는지, 전체 테이블 스캔이 일어나고 있는지 등을 보여줍니다. – Asaph

+0

좋아, 그렇게 할 것입니다. 그 외에도 모든 열 유형을 정상적으로 변경할 수 있어야합니까? 인덱스 삭제 및 다시 작성과 같은 작업을 수행해야합니까? – Roger

관련 문제