반응형

저희 사내 DB중에 mysql을 sharding 시켜서 이용하는 DB가 있습니다. 

 

하지만, 단점이 join을 사용하였을 경우, 쿼리 속도가 안드로메다가 된다는 점인데요.

 

다른 부서로 가신 분께 인수인계를 받은 소스 중에 DB가 sharding되어 있다는 점을 전혀 고려하지 않고,

개발이 되어 있던 쿼리가 있어서, 초반에 고객들이 별로 없었을 때는 문제가 없었지만,

고객이 많아지니까 쿼리 속도가 15초가 나오더군요-_-

 

그래서 일단 join을 제거하고, 소스 상에서 처리를 하였는데요.

여전히 느리더군요..

 

또 다시 문제를 파악하던 도중 문제를 발견했는데,

근본적인 문제는 특정 컬럼을 기준으로 order by 하는 데 index가 걸려있지 않아서 느리던 현상이었습니다.

 

따라서, DBA분께 요청해서 index를 생성하는 방향으로 해결하기로 했었습니다.

 

하지만, index를 생성하였는데도 속도가 그대로군요.

 

해당 쿼리가 어떤 index를 사용하고 있는지, explain명령어를 통해서 보았는데..

다른 index를 사용하고있더군요-_-..

 

그래서 강제로 방금 생성한 index를 사용하도록 쿼리를 수정하였더니 0.1초도 안걸렸습니다.

 

아래와 같이 사용하시면 됩니다.

SELECT *
FROM A use index {인덱스명}

반대로 인덱스를 사용하고 싶지 않은 경우

SELECT *
FROM A ignore index {인덱스명}
반응형
,