해당 테이블에 광대한 데이터를 SELECT시 느려지는 문제.
본문
// 그누보드 소스를 보면
$sql_common = " from {테이블} ";
$sql_search = "where 1=1 ";
// ※ DB는 POD를 사용합니다.
$sql = " select count(*) as cnt $sql_common $sql_search $sql_order ";
$stmt = $chatdb_slave->prepare($sql);
$stmt->execute();
$row = $stmt->fetch();
$total_count = $row[cnt];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
해당 게시판 LIST 페이지를 출력하는 소스 중 일부분 입니다.
소스 보시면 $total_count 를 출력해서 그누보드에서 지원하는 paging 함수로 가야 되는데요
문제는 해당 테이블 용량이 지금 몇십GB 입니다.
출력되는 LIST 게시판을 출력시 LIMIT를 걸어놓으면 빠르겠지만
문제는 페이징을 구현할려면 어쩔수 없이 해당 테이블 전체 row 갯수를 구해야 하다보니
이부분에서 느려질수 밖에 없는데요.
이 문제를 어떻게 해결하면 좋을까요?
딱히 좋은 방법이 생각이 안나 이렇게 문의 드립니다 ㅠ,ㅠ
!-->답변 2
1. 백업을 먼저 하시고
2. 테이블 옵티마이징을 수행하시고
3. where 절의 키값들에 index를 설정하세요
4. db서버와 웹서버가 동일 서버라면
가급적 서버를 분리하세요
5. db에 데이타가 그렇게 많으신환경이라면 중요데이타일텐데,
분리뿐만 아니라 클러스터링 (가능하시면 aws 추천합니다.) 으로
데이타를 이전시켜서 접근하시면 해결될듯 싶습니다.
** 백업 필수입니다.
레코드 수가 그렇게 많으면 어떤 방법을 사용해도 가볍게 실행 되지는 않겠지요
년도단위로 테이블을 분리하고 기본으로 현재 년도가 나오고 select box로 년도를 선택해서 리스트를 출력하면
좀 나아 지지 않을까요?
답변을 작성하시기 전에 로그인 해주세요.