woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

문자열 타입과 숫자 타입 작성시 MySQL에서의 우선 순위 #29

Open jurlring opened 2 years ago

jurlring commented 2 years ago

주제

문자열 타입과 숫자 타입 작성시 MySQL에서의 우선 순위

선정 이유

그냥 훌훌 읽다가 생각치도 못한 부분을 발견해서 선정하였다. 타입 확인시 다르면 바로 exception이 나는 줄 알았는데 아니였다니...!

해당 텍스트

MySQL은 숫자 타입과 문자열 타입 간의 비교에서 숫자 타입을 우선시하므로 문자열 값을 숫자 값으로 변환한 후 비교한다.

SELECT * FROM test WHERE number_column = '10001'; 

위의 쿼리문은 숫자로 변환 후 비교한다.

SELECT * FROM test WHERE string_column = 10001; 

하지만 문자열 컬럼에 숫자가 들어온 경우, MySQL은 문자열 컬럼을 숫자로 변환해서 비교한다.

즉, string_column의 모든 문자열 값을 숫자로 변환해서 비교를 수행해야하므로 인덱스가 있더라고 이를 이용한 비교가 아닌 값을 다 꺼내서 비교하게 된다.

string_column에 알파벳 같이 숫자가 아닌 문자가 있을 경우는 숫자로 변환할 수 없어, 쿼리 자체가 실패할 수 있다.

관련 페이지

기억이 안남요..