PK를 제가 이번에 문자로 걸어야 할 일이 있어서
테스트를 좀 해봤는데
궁금한게 있어서 이렇게 올립니다.
사진에 보시면 INT와 BIGINT는 실행계획상에서 형변환이 일어나는데
CHAR는 안일어 납니다.
제가 알고 있기로 보통 PK는 문자보다는 숫자형으로 걸어주라고 많이 들었는데..
이렇게 내부적 형변환이 일어나는건 성능상 더욱 않좋지 않나요?
왜 그런지 궁금하네요...제가 잘못한건지...
아 마지막으로 테스트 데이터는 동일하게 10000건입니다.
Comment 4
-
향지
2013.09.25 14:13
-
군고구마
2013.09.25 15:28
으흠... 제가 지금 작업하는 것은 아마 ROW가 많아봐야 한달에 3~4건씩 들어올 듯합니다.
공지사항의 성격이기 때문에 .. 그리고 조인의 경우 딱 1곳에서만 쓰는데 pk를 꼭 숫자로 IDENTITY 값으로 할 필요는 없을것
같아서 일부러 문자로 고려하였습니다. (문자의 경우 고유한 구분자 코드가 존재)
여기서 또한 코드는 엄청나게 길거나 복잡하지 않아서 고려하였는데 ...
으흠... 생각해봐야 할 것 같습니다.
답변 감사합니다~
-
minsouk
2013.09.25 14:17
실제 프로그램에서 바인딩시켜서 쓰면 이런일이 일어나지 않습니다.
바인딩시 만약 다른형으로 들어가는 경우라면 형 우선순위에 따라 암시적 형 변환을 수행하게 되고 그것은 성능에 영향을 줄 수도 있습니다.
(데이터가 변경되는 경우는 데이터를 모두 변경한 후에 인덱스를 사용못하는 경우가 발생 할 수 있어 성능이 나빠질 수 있고, 변수쪽이 변경되는 경우는 1개만 바꾸면 되고 인덱스도 적설히 사용할 수 있으므로 별 영향이 없습니다. )
형 변환과, PK 를 숫자형으로 하느냐 문자열로 하느냐는 다른 이슈로 보는게 좋을듯 싶습니다.
-
군고구마
2013.09.25 15:31
답변 감사합니다. ~
예전에 개인적으로 비슷하게 테스트 해본건데
문자열 연산이 숫자 연산보다 비용이 훨씬 큽니다.
상황에 따라 틀릴수도 있지만
제가 테스트 할때의 형변환 비용은 위에 비용차이보다 훨씬 적었구요.
PK로 사용한다는 것은 조인이나 검색등의 비교 연산으로 쓰일수 있으니
연산 비용이 적은 숫자형을 우선 고려하는 것이 좋습니다.