sub_title
 MySQL
제   목 MySQL 바이너리 검색시 인덱스를 타게하기
작성자 높이뜬새 등록일 2015-06-29 00:03:48 조회수 6,779
MySQL 바이너리 검색시 인덱스를 타게하기

※ 경고
높이뜬새의 모르는 사람이 없는 팁시리즈 입니다.
이 팁시리즈는 지면낭비라는 항의시에 즉각 중단됩니다.

MySQL에서 많이들 사용하는 varchar, char, text 타입은 non binary 타입이기 때문에  대소문자 구분을 하지 못합니다.

즉 검색할때 대소문자 구분없이 결과값을 돌려준다는 말씀입니다. ('AAA'든 'aaa' 구분을 하지 못하는거 잘 알고 계실겁니다 ) 

그럴경우에 강제로 binary 타입으로 캐스팅을 해주면 대소문자를 구분하여 결과값을  돌려주게 됩니다. 

SELECT * FROM [테이블명] WHERE binary(컬럼1) = 'ABCd';
 

위의 컬럼1이 테이블 생성시에 varchar, char, text 타입등으로 생성된 컬럼이라 할지라도 binary 타입으로 캐스팅 하였기 때문에 
정확히 대소문자를 구분하여 해당하는 결과값만 보여주게 됩니다.

인덱스를 타지 않는 아래와 같은 쿼리에서는 아무 문제가 없습니다. 

SELECT * FROM bbs_board WHERE binary(nickname) like '%ABCd%';

하지만 아래의 쿼리에서 nickname 컬럼이 Key Index일 경우에는 문제가 발생합니다.

SELECT * FROM bbs_board WHERE binary(nickname) = 'ABCd';

nickname 컬럼이 생성시에 varchar 타입으로 생성되었다고 가정할때, varchar 타입을 binary 타입으로  캐스팅 하였기 때문에 Key
를 타지 못하게 됩니다.
 

Key를 타게 할려면 컬럼을 binary로 캐스팅 하지 말고 "검색어" 즉 "키워드"를 binary 타입으로 캐스팅 해주세요.

SELECT * FROM bbs_board WHERE nickname = binary 'ABCd';

 

SELECT * FROM [테이블명] WHERE (컬럼명) = binary '키워드';  

 

위와 예와 같이 쿼리를 날려주시면 인덱스도 타면서, 대소문자도 구분도 아주 잘해 준답니다.

 
10
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
49  MariaDB 10의 NoSQL 기능과 MySQL의 Json 관련 UDF   member 달콤한수 2 / 0 6912 2017-11-29
48  MySQL은 공짜가 아니다   member 진짜고구 3 / 1 5651 2017-08-24
47  MySql 문자열 함수   member 진짜고구 0 / 0 3937 2017-08-24
46  MySQL IN subquery 성능. IN sub query는 가급적 사용을 피합시다!   member 진짜고구 0 / 0 5850 2017-08-21
45  [MYSQL] 가져온 값을 조건에 따라 값 바꾸기(case - when - end 문)    member 진짜고구 0 / 0 3596 2017-08-21
44  MySQL 가져온 데이터 삽입하기(SELECT 하면서 INSERT하기)   member 높이뜬새 1 / 1 20479 2017-08-19
43  터미널에서 접속해 MySQL 테이블 내용을 볼려고 할때 한글이 깨진다면!!   member 높이뜬새 0 / 0 2106 2017-04-04
42  MySQL 문자열 길이 구하기   member 높이뜬새 2 / 0 15775 2017-04-04
41  MySQL 사용자 권한설정 (grant 명령어) 이미지   member 높이뜬새 1 / 0 11126 2016-10-23
40  MySQL 컬럼중 가장 큰값 가져오기 이미지   member 높이뜬새 1 / 0 5766 2016-08-20
39  MySQL 오늘기준으로 최근 한달 동안 데이터 가져오기   member 높이뜬새 2 / 2 15721 2016-08-09
38  MySQL 원격서버로 덤프파일 복원하기   member 높이뜬새 1 / 0 5761 2016-04-27
37  MySQL에서 특정 문자열만 변경하기 이미지   member 높이뜬새 0 / 0 10717 2016-01-23
36  MySQL 이번주의 요일별 날짜를 가져오기 이미지   member 높이뜬새 0 / 0 10960 2016-01-20
35  MySQL 요일 구하기 이미지   member 높이뜬새 3 / 0 22231 2016-01-18
34  MySQL 문자형 컬럼에 숫자가 포함된 데이터 가져오기   member 높이뜬새 1 / 0 6413 2015-06-29
33  MySQL 바이너리 검색시 인덱스를 타게하기   member 높이뜬새 10 / 0 6779 2015-06-29
32  MySQL 컬럼의 중복 레코드 수를 구하기   member 높이뜬새 2 / 0 2975 2015-06-29
31  MySQL 자동증가, auto increment 값 초기화 하기   member 높이뜬새 3 / 0 6198 2015-06-29
30  MySQL 테이블 복사하기 이미지   admin 웹마당넷 4 / 0 9260 2015-06-28
29  MySQL 필드의 결합   admin 웹마당넷 1 / 0 3749 2015-06-26
28  MySQL select 출력 값을 text파일로 만들기 이미지   admin 웹마당넷 3 / 0 6140 2015-06-26
27  MySQL 에서 IF문 사용하기   member 높이뜬새 23 / 3 149896 2010-03-08
26  MySQL 날짜 차이 구하기   member 높이뜬새 6 / 1 23025 2010-01-25
25  MySQL 특정 테이블만 백업하기   member 높이뜬새 11 / 0 49954 2010-01-06
write
[2] button