Mysql 에서 날짜형 검색에 대한 where의 비교방식에 의한 Explain 차이

  • Mysql 에서 날짜형 검색에 대한 where의 비교방식에 의한 Explain 차이
  • 구조
    • REQUEST_TIME는 DATETIME 형으로 INDEX(IDX_REQUEST_TIME)가 설정되어있음
  • 예제 쿼리
    • EXPLAIN SELECT
      DEST_PHONE T_PHONE
      ,REQUEST_TIME T_DATE
      ,MSG_BODY T_MSG
      FROM uds_log
      WHERE REQUEST_TIME BETWEEN '2009-10-01 00:00:00' AND '2009-10-01 23:59:59'
      • 또는 WHERE REQUEST_TIME BETWEEN CONVERT('2009-10-01 00:00:00' , DATETIME) AND CONVERT('2009-10-01 23:59:59' , DATETIME)
        똑같은 결과
    • EXPLAIN SELECT
      DEST_PHONE T_PHONE
      ,REQUEST_TIME T_DATE
      ,MSG_BODY T_MSG
      FROM uds_log
      WHERE REQUEST_TIME LIKE '2009-10-01 %'
  • 결과
    • id select_type table type possible_keys key key_len ref rows Extra
      1 SIMPLE uds_log range IDX_REQUEST_TIME IDX_REQUEST_TIME 8 \N 832 Using where
    • id select_type table type possible_keys key key_len ref rows Extra
      1 SIMPLE uds_log ALL IDX_REQUEST_TIME \N \N \N 1277536 Using where
  • 분석
    • DATETIME 형태를 검색할 때는 RANGE 검색이 되도록하는 게 좋다.
    • LIKE 로 검색할 경우 ALL로 모든 row가 검색되는 결과가 되버린다.
  • 마무리
    • 문자열 비교가 아니라면 LIKE는 쓰지말자.
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📅 달력형