SELECT A.LOGIN_SESSION_ID, A.USER_NAME, A.USER_IP, A.SERVER_IP, A.ACTION_DATE, B.ACTION_DATE, B.ACTION, A.LOGIN_LOG_ID FROM (SELECT USER_NAME, USER_IP, ACTION_DATE, ACTION, LOGIN_SESSION_ID, LOGIN_LOG_ID, SERVER_IP FROM LOGIN_LOG WHERE ACTION = 'Login' ) A LEFT JOIN (SELECT USER_NAME, USER_IP, ACTION_DATE, ACTION, LOGIN_SESSION_ID FROM LOGIN_LOG WHERE ACTION = 'LogOut' OR ACTION = 'TimeOut') B ON B.LOGIN_SESSION_ID = A.LOGIN_SESSION_ID ORDER BY A.LOGIN_LOG_ID DESC
안녕하세요.
다음과같이 Login Log를 남기고 있는 테이블에서, 셀프 조인을해서 조회페이지에서 제공을 하는데.
셀프조인을 하면 데이터가 7만건인데 이 조인쿼리 속도가 거의 30~40초를 넘어갑니다.
어떻게 튜닝을 할 수있을까요?
제가 생각한방법은 조인하기전에 정렬을 한뒤에 조인을 하는거였는데 left 조인을 하니 섞여버리네요...
조언좀 부탁드리겠습니다.
(따로 키등록은 안하고 primary key가 autoincremnet 인 LOGIN_SESSION_ID 컬럼입니다.)
DB는 마리아디비입니다.
우리집아찌 // 네 결과갑 자체는 제가 원하는게 맞습니다.
select 문을 치면 아래와 같이 나옵니다.
---------------------------------------------------------------------------
로그인로그ID(AUTOINCREMENT값) 유저네임 클라이언트IP 서버IP 로그인한시각 로그아웃시각(없음NULL)
123 user 110.11.11.2 11.11.11.11 2018/08/07 14:00 2018/08/07 16:00
123 user2 110.11.11.2 11.11.11.11 2018/08/09 14:00 null
--------------------------------------
이상하다고 생각한 곳이있으신지요?ㅠㅠ
SELECT login_session_id , user_name , user_ip , server_ip , MIN(CASE WHEN action = 'Login' THEN action_date END) Login_Date , MIN(CASE WHEN action != 'Login' THEN action_date END) LogOut_Date , MIN(CASE WHEN action != 'Login' THEN action END) LogOut_Action , MIN(CASE WHEN action = 'Login' THEN login_log_id END) Login_Log_ID FROM login_log WHERE action IN ('Login', 'LogOut', 'TimeOut') GROUP BY login_session_id, user_name, user_ip, server_ip ORDER BY Login_Log_ID DESC ;