[DB 질문] auto increment 값으로 검색과 index 건 id 값의 검색의 속도차이
본문
[DB 질문] auto increment 값으로 검색과 index 건 필드값의 값의 검색의 속도차이가 있는지요?
자료량은 1천만건이요.
저희 팀장님은 인덱스를 필드를 걸면 auto increment 로 한것과 동일한 결과가 나온다는데
전 아닌것으로 알고있어서요.
혹시 아시는 분 계신가요?
답변 4
확실하게 속도 차이가 납니다.
Mysql 내부구조을 잊어먹어서 같은 파일안에 pk 와 index 정보를 같이 보관하는지 기억이 가물가물해서 ..
Mysql 의 경우
Innodb, myisam 이냐에 따라서도 index 속도가 틀리구요.
즉, 차이가 있는게 맞는걸로 알고 있고, pk 와 index 둘다 유일키라 하더라도 내부는 다르게 움직인다라고 기억하고 있습니다.
혹시나 싶어 적는데 pk 에 별도의 index 을 주실 필요는 전혀없습니다..본글에 적으신 레코드을 조회할시 느리다면 쿼리 튜닝으로 해결하세요
추가..저의 기억이 맞네요.
그림이 있는데 지금 못찾아서
아래 링크를 보시구요..db 마다 큰 시각으로 봤을때 내부 처리 흐름이 차이가 있습니다.
Db 파서쪽으로 찾아보세요.
아래는 innodb 의 경우입니다.
http://intomysql.blogspot.kr/2010/12/innodb.html?m=1
http://i.stack.imgur.com/9EcRi.jpg
auto increment 속성을 줄 수 있는 것은 PK만 되요.
pk는 index , unique 속성을 가지고 있어요
결론 적으로 index와 같은 것이에요.
데이터베이스 기초 이론인데요.... 데이터베이스를 배운적이 없나 봐요~~~~^^
워낙 유명고수분이라 쉽게 답달기가 겁나네요. ^^;
잘은 모르지만, 벤지님 답변에 숟가락 하나 얹어봅니다. ^^
http://stackoverflow.com/questions/14175627/does-a-primary-key-speed-up-an-index
그냥 생각해보면, index에는 중복값이 허용되기에 조금의 차이가 있을것 같고,
위에 따라면, pk에는 null값이 불허되어, NOT NULL 최적화 (이게 엔진 레벨인지, 쿼리를 그렇게 하라는 건지는 모르겠네요.. ^^;) 가 가능하다고 하네요.
그리고, 벤지님 말씀대로, innodb의 경우, pk 필드는 물리적으로 정렬저장되어 훨씬 빠른 검색이 가능한것 같네요. ^^
경우에 따라서 auto increment 가 걸린게 더 빠릅니다. (order by 포함)
커버링 인덱스도 사용할수 있고,
그래서 auto increment 가 없는 테이블이라도 가급적 auto increment 필드를 넣는게 좋아요.
(테이블에 auto increment 가 없으면, mysql이 내부적으로 하나 만들어서 씁니다. 내부에서 만들어서 쓰는거니, 사용자는 사용할수가 없죠... 어짜피 만들어질거, 사용자가 직접 만들어두는게 이득)