출처 : http://web.ggambo.com/z/zboard.php?id=5000401&no=316

mysql에서 order by로 검색이 되지 않을때 대처 방법

이게 가나다 순이라던가 abc순으로 검색 되지 않을때가 있다. 물론 대부분 잘 된다. ㅎㅎㅎ

예를 들어서 order by name desc를 해야하는데 되지 않는 경우 name 앞에 binary를 써주면 된다.

select * from test order by binary name desc ;

성능면에선 어떨까? 출처에 의하면
" 확인 된 내용은 아니지만 binary를 사용하면 좀 느려질 수 있다"고...

바로 확인 들어갔다.
130만건의 데이터가 있는 테이블에서 BINARY를 사용했을때와 그렇지 않았을때...
LIMIT 100건, 1000건일때...테스트 결과는
BINARY를 사용했을때가 130ms정도 속도가 늦었다. 뭐 몇번 테스트 해본건 아니지만... 늦긴 한거 같다..

혹시 프로그램 하다 order by 제대로 먹지 않는다면 위와 같이 함 해봐야겠다.



MYSQL SET 컬럼타입 사용법

Posted 2007. 10. 31. 11:29
기존 DBMS(오라클, MS-SQL등..)에서 보지 못한 MySQL에서 제공하는 컬럼타입중에 ENUM, SET형태가 있다. 설명으로 보면 둘다 select박스에서 데이터를 선택하는 식이고 ENUM은 단일선택, SET은 다중선택을 지원한다는 것이 그 차이.
enum은 뭐 간단하다. 하나씩 들어가는 자료이니..
set을 사용하면서 enum과 같은 식으로 사용하려고 하니 안된다.

set('AA01','AA02','AA03','AA04')로 넣어놓고...
INSERT INTO TEST VALUES (1)
==> AA01 이 들어간다.
두개 이상을 넣을수 있다고 했는데 어떻게 넣어야 하나?
삽질을 하다가 알게 되었다. 각 자료마다 진수형태로 번호를 지정한다.
'AA01' : 1
'AA02' : 2
'AA03' : 4
'AA04' : 8

그리고 각각의 합으로 2개이상의 데이터를 넣는다.
'AA01'과 'AA02'를 넣을때는 그 합인...values(3) 을...
'AA01', 'AA03' 을 넣을때는 ...values(5)를...
4개 다 넣고자 할때는? ...values(15)를 하면 된다.
ㅎㅎㅎ


MySQL ENUM 타입에 대해서..

Posted 2007. 10. 29. 18:34
MySQL 서브쿼리는  버전 4.1.x 대부터 지원하고 있다.

ENUM(value1, value2, value3...) value는  최대 65535 개까지 가능.

CREATE TABLE TEST (
id varchar(10),
name varchar(20),
auth_code  ENUM('AA01', 'AB01', 'AC01', 'AD01', 'AD99')
)

INSERT INTO TEST VALUES ('test', '테스트','AA01')
INSERT INTO TEST VALUES ('test2', '테스트1', 2)

select * from TEST;
결과는
 ------------------------------------
   id          name           auth_code
-------------------------------------
 test          테스트            AA01
 test2        테스트2           AB01
-------------------------------------
select *  from TEST where auth_code = 1;
결과는
------------------------------------
  id          name           auth_code
-------------------------------------
test          테스트            AA01
-------------------------------------

속도면에서도 도움이 될것 같다. 디비가 알아서 n개중에 하나를 찾게 되니...

비슷한 기능을 하는 놈 중에 SET이 있는데 ENUM이 한개만 선택이 가능하다면 SET은 다중선택이 가능해서 입력이 가능하다는것....

INSERT INTO TEST VALUES ('test', '테스트','AA01,AB01, AC01') <-- ENUM타입이라면 에러난다.

암튼 좀 특이한 타입이지만 나름 유용하게 사용하면 좋을것 같다.


« PREV : 1 : ··· : 11 : 12 : 13 : 14 : 15 : NEXT »