SET timestamp=1493214213;
SELECT `comments`.`regdate`  FROM `xe_comments` as `comments` , `xe_documents` as `documents`   WHERE `documents`.`category_srl` = 44469 and `comments`.`document_srl` = `documents`.`document_srl` and `comments`.`status` = `comments`.`status`    ORDER BY `comments`.`regdate` desc  LIMIT 1;
# Query_time: 10.019935  Lock_time: 0.000017  Rows_sent: 1  Rows_examined: 465304
# Rows_affected: 0

 

슬로우쿼리 로그 일부 내용입니다.

단독서버호스팅 이용중인데 db쪽으로 그냥 기본지식밖에 없는지라

나름 구글에서 index 관련하여 찾아서 설정을 해주었는데 계속 똑같은 로그가 나오네요.

염치 없지만 조금 팁을 얻을 수 있을까요~?

  • profile

    검색 및 조인하는 조건(document_srl, category_srl)이 검색 범위를 충분히 좁혀주지 못하는 상태에서 전혀 다른 컬럼(regdate)으로 정렬하려고 하면 인덱스가 큰 도움이 되지 못하기 때문에 ORDER BY에서 부하가 많이 걸립니다. 아마 ORDER BY를 빼고 아무거나 1개 가져오라고 하면 순식간에 나올 거예요.

    물론 ORDER BY를 빼버리면 가장 최근의 댓글을 가져온다는 목적에 맞지 않으니 그렇게는 곤란하겠고요... 댓글이 꾸준히 많이 올라오는 사이트라면 WHERE comments.regdate > '20170420000000' 이런 식으로 최근 7일 이내의 댓글만 검색하도록 조건을 하나 더 달아 주시면 큰 도움이 됩니다. (사이트의 댓글 등록 빈도에 따라 15일, 30일 등으로 검색 범위를 넓히거나 1일, 3일 등으로 더 좁히셔도 됩니다. 전체 기간을 검색하지만 않으면 됩니다.)

  • profile profile
    너무 기초적인 질문이지만 WHERE comments.regdate > '20170420000000' 이구문을
    어디쪽에 적용을 시켜야 하는지 알 수 있을까요?
    매번 자세히 알려주시고 도움 주셔서 정말 정말 감사합니다!
  • profile profile
    XE에서 사용하는 XML 쿼리라면 해당 파일을 찾아서 <condition> 태그를 추가하고, 쿼리를 호출하는 곳(애드온이나 위젯 등)에서도 마찬가지로 regdate 값을 넣어 주어야 합니다.
  • profile
    @CONORY 님의 "메뉴 새글 표시 모듈"에서 사용하는 쿼리로 확인되었습니다.
    https://xetown.com/xepoint/12592

    설정된 새글 표시 기간에 따라 regdate 범위를 적절히 제한해 주시면
    글과 댓글이 많이 쌓여 있는 사이트에서 성능이 크게 향상될 것 같습니다.
    comments.status = comments.status 조건도 불필요한 것 같고요...