PM 07:00 쯤에 친구에게서 전화가 왔다. DB튜닝을 해야 하는데 어찌하면 좋겠냐는 것이다. 상황은 이렇다. 1초에 1건씩 들어온다. 테이블의 컬럼수는 조낸 많다. 50개 이상. 가장 마지막으로 입력된 1건을 가져와야 한다. DBMS는 MySQL이다. 윽, MySQL이다. 내가 MySQL에 투자한 시간은 10시간도 안되는데.. 어찌되었건 친구로부터 SQL문을 받았다. 생전 처음보는 함수였다. Where 절은 대충 이랬다. (기억이 잘 안난다.) Where timestamp > date_sub(now(), interval 3) and 어쩌구컬럼 = 어쩌구 limit 1 인덱스는 'timestamp + 어쩌구컬럼 '으로 구성되어 있었다. 찾아보니 date_sub(now(), interval 3) 의 결과는 날짜형으로 '2008-01-16 10:23:21' 로 리턴되는 함수였다. 반면에 timestamp는 varchar(32)로 '20080116102321'형태였다. MySQL은 잘 모르지만 '아하! 내부적인 형변환이로구만!' 하는 것이 느껴졌다. 그래서 단순히 cast(date_sub(now(), interval 3) as varchar(32))를 했더니 구문에러다. 아..닝기리.. 표준도 안된단 말이냐? 그런데 찾아보니 날짜형 '2008-01-16'는 cast함수가 먹지만 다른 형태는 안먹는단다. 그래서 꽁수로 다른 문자열 함수를 생각해 보았다. substring, left가 생각났다. left(date_sub(now(), interval 3) , 23) .. 아...된다. 그런데 timestamp형식인 'YYYYMMDDHHMISS'형식을 어케 만들지? 검색을 해보았다. 젠장... 조낸 안나온다..그래서 그래서 replace로 '-'과 ';'과 ' '를 공백문자('')로 바꿔치기를 했다. 그리고 친구에게 그걸로 실행시켜보라고 했다. 실행결과 기존에는 6~7초가 걸렸던 것이 0.02초 정도로 줄었다고 했다. 데이터는 임의로 약 4백 만 건정도를 집어 넣었다고 한다. 친구가 언제 밥이나 술을 산다고 기뻐했다. 나도 역시 기뻤다. 결과가 내가 예측한데로 나온 것이 기쁜것이 아니었다. 선무당이나 되지 않을까? 나의 기본적인 데이터베이스 시스템에 대한 지식이 토대가 된 솔루션이 틀리지나 않을까 ? 친구에게 희망을 주었으나 더 깊은 절망을 주지나 않을까? 하는 걱정 때문이었다. 어쨌든 친구덕에 오늘도 몇 가지 MySQL에 대한 몇 가지 지식을 습득할 수 있었다. 기쁜날이다..