데이터베이스(DB) 부하 최적화

· 2개월 전 · 214

그누보드5 기반 사이트를 운영하다 보면 게시글이 수만 건을 넘어서는 순간 사이트 속도가 급격히 느려지기 시작합니다. 이때 가장 효과적인 해결책은 서버 사양을 높이는 것이 아니라, 적절한 인덱스(Index) 활용에 있습니다.

 

1. 인덱스가 필요한 컬럼 선별하기
모든 컬럼에 인덱스를 걸면 오히려 INSERT, UPDATE 속도가 저하됩니다. 아래 기준에 맞는 컬럼에만 적용하십시오.

WHERE 절에서 자주 사용되는 컬럼

ORDER BY (정렬) 기준이 되는 컬럼

JOIN 시 연결 고리가 되는 컬럼

**Cardinality(기수성)**가 높은 컬럼 (예: 성별보다는 중복이 적은 아이디나 이메일)

2. 복합 인덱스(Composite Index)의 순서 원칙
여러 컬럼을 묶어 인덱스를 만들 때는 순서가 핵심입니다.

규칙: WHERE a = 1 AND b = 2를 조회할 때, 인덱스가 (b, a) 순서로 되어 있다면 성능이 최적화되지 않을 수 있습니다.

가장 필터링 효율이 좋은(범위를 많이 좁혀주는) 컬럼을 앞쪽에 배치해야 합니다.

 

3. 실행 계획 확인 (EXPLAIN)
내가 짠 쿼리가 인덱스를 제대로 타고 있는지 확인하는 가장 전문적인 방법입니다.

-- 쿼리 앞에 EXPLAIN을 붙여 실행합니다.
EXPLAIN SELECT * FROM g5_write_free WHERE wr_id = 100 AND wr_is_comment = 0;

 

type: ALL이면 Full Scan이므로 반드시 인덱스를 점검해야 합니다. ref나 range, const가 나와야 우수합니다.

key: 실제로 사용된 인덱스 이름이 표시되어야 합니다.

rows: 쿼리를 처리하기 위해 조사한 행의 수입니다. 이 수치가 낮을수록 성능이 좋습니다.

 

4. 그누보드5 실무 적용 팁
그누보드의 g5_board_new (최신글 테이블)나 g5_write_... (게시판 테이블)는 데이터가 금방 쌓입니다.

만약 특정 여유필드(wr_1, wr_2 등)를 이용해 검색 기능을 구현했다면, 관리자 페이지의 DB 관리나 phpMyAdmin을 통해 해당 컬럼에 인덱스를 추가하는 것만으로도 페이지 로딩 속도를 혁신적으로 개선할 수 있습니다.

 

 

|
댓글을 작성하시려면 로그인이 필요합니다.

개발강좌

+
제목 글쓴이 날짜 조회
2주 전 조회 120
2개월 전 조회 215
6개월 전 조회 293
7개월 전 조회 520
8개월 전 조회 537
9개월 전 조회 407
2년 전 조회 1,443
2년 전 조회 1,063
2년 전 조회 1,135
2년 전 조회 2,573
2년 전 조회 1,007
2년 전 조회 1,313
3년 전 조회 2,493
3년 전 조회 2,946
3년 전 조회 3,444
3년 전 조회 3,817
4년 전 조회 3,004
5년 전 조회 6,029
5년 전 조회 3,537
7년 전 조회 8,528
7년 전 조회 8,477
8년 전 조회 4,724
8년 전 조회 7,555
8년 전 조회 5,614
8년 전 조회 4,233
8년 전 조회 3,867
8년 전 조회 3,498
8년 전 조회 3,753
9년 전 조회 8,621
9년 전 조회 6,819