database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30900 게시물 읽기
No. 30900
group_concat관련 질문입니다.
작성자
차정훈(jughuni)
작성일
2015-11-19 10:14ⓒ
2015-11-19 10:15ⓜ
조회수
7,257

아래 테이블 처럼 데이터가 100만개 가량 되는 테이블이 있습니다.

 

log_name cate log_num credate
1페이지 74 2 2015-11-18 14:23:23
2페이지 45 1 2015-11-18 15:21:45
1페이지 74 2 2015-11-18 17:12:43
3페이지 234 5 2015-11-18 16:08:15
5페이지 45 3 2015-11-18 14:15:42

해당 테이블에 로그를 뽑아 오는 중에 데이터 양이 방대하여 시간이 너무 오래 걸리고 있습니다.
아래 쿼리문으로 로그를 뽑아 오고 있는데 시간을 줄일수 있는 방법이 없을까요?

SELECT log_name, GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 15' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_0,
GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 14' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_1,
GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 13' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_2,
GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 12' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_3,
GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 11' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_4,
GROUP_CONCAT(CASE WHEN DATE_FORMAT(credate,'%Y-%m-%d %H')='2015-11-18 10' THEN log_num END ORDER BY naver_num ASC SEPARATOR ',') AS row_5
FROM log_table WHERE 1 AND DATE_FORMAT(credate,'%Y-%m-%d %H') <='2015-11-18 15' AND DATE_FORMAT(credate,'%Y-%m-%d %H') >='2015-11-18 10' AND cate='74' GROUP BY log_name

이 글에 대한 댓글이 총 2건 있습니다.

SELECT log_name
     , MIN(CASE ymdh WHEN '2015-11-18 15' THEN v END) AS Row_0
     , MIN(CASE ymdh WHEN '2015-11-18 14' THEN v END) AS Row_1
     , MIN(CASE ymdh WHEN '2015-11-18 13' THEN v END) AS Row_2
     , MIN(CASE ymdh WHEN '2015-11-18 12' THEN v END) AS Row_3
     , MIN(CASE ymdh WHEN '2015-11-18 11' THEN v END) AS Row_4
     , MIN(CASE ymdh WHEN '2015-11-18 10' THEN v END) AS Row_5
  FROM (SELECT log_name
             , DATE_FORMAT(credate, '%Y-%m-%d %H') ymdh
             , GROUP_CONCAT(log_num ORDER BY naver_num) v
          FROM log_table
         WHERE 1
           AND credate >= CAST('2015-11-18 10' AS DATETIME)
           AND credate <= CAST(CONCAT('2015-11-18 15',':59:59') AS DATETIME)
           AND cate = '74'
         GROUP BY log_name
             , DATE_FORMAT(credate, '%Y-%m-%d %H')
        ) a
 GROUP BY log_name
;

마농(manon94)님이 2015-11-19 10:59에 작성한 댓글입니다.
이 댓글은 2015-11-19 10:59에 마지막으로 수정되었습니다.

우선 답변 감사드립니다.

 

date_format을 사용하여 credate에 인덱스를 타지 못하는거 같아 우선 비교값을 시간으로 변경하여 인덱스를 태우니

그나마 조금은 빨라진듯 하네요

차정훈(jughuni)님이 2015-11-19 11:49에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30903Where 절에 Function 사용시 key를 못타는 문제입니다. [2]
김학영
2015-11-26
7326
309023개의 문을 하나로 합치고싶어요 [1]
김우성
2015-11-20
7371
30901원격으로 mysql 접속이 불가능합니다. [1]
k2il
2015-11-19
7661
30900group_concat관련 질문입니다. [2]
차정훈
2015-11-19
7257
30899레코드 포인터값 유지 [1]
고민
2015-11-13
7028
30898당일최대값, 전일최대값, 전달 최대값을 쿼리 한번에 하기?
푸르미
2015-11-13
7191
30897select 1
오니
2015-11-12
6839
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다