mysql 옵티마이저의 충격적인 성능?

mysql 옵티마이저의 충격적인 성능?

QA

mysql 옵티마이저의 충격적인 성능?

본문

최근 한가지 충격적인 사실을 알게 되었는데,

mysql 옵티마이저가 이름과는 다르게(?) 멍청하다는데

 

select 

from

where 

위 간단한 구문도 인덱스 순서, 조건 순서를 고려해야 하고

만약 옵티마이저가 동작하는 방식을 이해하지 못하고

사람이 생각하듯(?)

" 이렇게 짜면 논리적으로 되겠구나~" 하고 막 코드 짜면

성능이 10배 이상 느려질 수도 있다는건데....

 

최신 mysql 버전도 똑같나요

제가 옛날 책을 읽어서 그런건지..

실제로 현업 dba는 sql 쿼리마다 성능 분석해서 튜닝하는지... (어느세월에...???)

궁금해요 ㅠㅠ

이 질문에 댓글 쓰기 :

답변 2

mysql 에 존재하는 optimize는 

저장소(보통은 disk)와 관련이 있습니다.

 

데이타들이 무작위로 저장될때

회원정보와 게시판A, B, C, 상품정보 1~100개, 주문정보 1~20000개 가 있다고 가정할때

데이타는 순차적으로 기록되게 됩니다.

이상황에 게시판에 댓글이 달리고, 새로운글이 작성되고, 

새로운 상품이 추가되고, 주문정보가 들어오면

데이타의 순서를 알수가 없게되죠그리고, 어떤데이타들은 삭제되고

그러면 중간중간 데이타가 공간이 생기고, 게시물/댓글/상품정보가 수정되고하면

1회원의 게시물만해도 데이타 자체가 산발적으로 저장되게 되는데 그보다 문제는

비어있는 공간들이 등장한다는것입니다.

분산되어있는회원의 정보가 1명일때야 어렵지 않지만, 100명, 1000명, 10000명 식으로 늘어나게되면

데이타를 찾기위해서 왕복하는 빈도가 급증하게되서 속도가 떨어지게됩니다.

 

optimize는 이런 데이타를 좀 줄이고자 하는 행위라고 보시면됩니다.

동일 정보는 적어도 동일선상에 위치하게 하려고 이동시키고(내부로직은 mysql 만든 팀에서 가장 잘알겠죠..우리는 그저 추측만..)

Windows에서 disk정리를 하는것과 비슷하다고 보시면됩니다.

 

그와 다르게 DB에서 속도를 높이는 중요한 역할은 index를 추가하는겁니다.

 

index 라고 불리우는 색인처리를 통해서 분산되어 저장된 데이타를 찾아가기 쉽게 하는 역할을위해서

index에 컬럼을 추가하는 행위를 통해서

데이타가 존재하는 위치를 기억해서 검색조건에 부합될수록 

순식간에 찾아갈수있는겁니다.

 

그런데 index의 중요한점은 과유불급.. 절대로 남용하면 안됩니다.

남용하는순간 되려 복잡한  index구조때문에 절대로 빠르게 작동하지 않게됩니다.

그러나, 없으면 절대적으로 느려집니다 (full scan )

 

더 자세한것은 SQL 에 대한 기본학습들을 하시는게 더 효과적일겁니다.

 

 

 

(오라클 생각해 보면)

보통은 사람?보다 똑똑합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 59,588
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT