안녕하세요. 질문등록은 처음입니다.
접속현황을 나타나는 페이지에 사용한 쿼리입니다.
사용자가 접속해서 로그아웃할때까지 처리한 내용을 액션으로 나누어서 표시하고 있거든요.
리스트로 조회를 할때,
일단 사용자가 로그인해서 로그아웃까지 처리한 것을 하나의 범위처럼 나누기위해서 (물론 로그아웃이 없을때도 있지만)
최근날짜부터 보여줘야하고 (날짜역순).사용자별로 보여줘야하고(사용자순). 처리한순서대로(시간 순) 이렇다보니.
SELECT
USER_ID AS [사용자ID],
ACCESS_IP AS [IP],
REG_DT,
(CASE ACT_CD WHEN 'L' THEN '로그인'
WHEN 'O' THEN '로그아웃'
WHEN 'C' THEN '등록'
WHEN 'R' THEN '조회'
WHEN 'U' THEN '수정'
WHEN 'D' THEN '삭제'
WHEN 'X' THEN '엑셀다운'
end) AS [사용기능],
convert(char(10), REG_DT, 120) as RGDATE --일자로 정렬하기 위해서 날짜만(2007-10-18)
FROM TB07
ORDER BY RGDATE desc, USER_ID asc, REG_DT asc
값은 이런식으로 나오구요. admin 127.0.0.1 2007-10-18 14:27 로그인 2007-10-18
convert(char(10), REG_DT, 120) as regdate <- 이것두 문제가 되는거 같긴해요. 이런 변형을 몇만건 데이터에 취해준다는게 좀;
REG_DT 하나로 asc, desc 일케 두번 사용이 안되고,
시간이 같이 들어간 필드로 정렬하면 그다음 조건이랑(USER_ID) 섞여서 일자로 정렬이 제대로 안되더라구요
(테이블에 log_seq있는데. 그걸 정렬에 이용해봐야하는지. 어차피 그것두 시간순서는 시간순서긴 하니;)
아.. 뭔가 바꿔줘야 할까요?
인덱스를 써야한다면 어떻게 만들어줘야하는지. 영.. 감이 안오네요.
원래 쿼리는 조인두 있는데.
그걸 죄다 빼고 한테이블에서 저런식의 정렬만 처리했는데. 너무 느리네요.
약 이만건데이터에 (조인포함하고)16초 가량;;;;
조언 부탁드립니다.
|