2013-07-26 1 views
3

테이블에 두 개의 필드 "이름"과 "날짜"가있는 3 억 개의 레코드가 있습니다. 지금은 대용량 테이블에서 카운트 쿼리를 최적화하는 방법

select count(*) from lenders_transaction WHERE dates >= now()-interval 1 month; 

을했다, 그래서 나는 지난 달의 기록을 계산해야하지만 오랜 시간이 걸리는, 그래서 카운트 쿼리와 얼마나 빨리 결과를 얻을하는 방법을 최적화하는 방법을 조언이 필요합니다.

+6

'dates' 필드에 색인이 있습니까? – valex

+0

EXPLAIN 출력을 점검하여 진행중인 작업을 확인하십시오. – Randy

+0

날짜 필드에는 색인이 없습니다. 만약 내가 그것을 추가하면 빠른 쿼리를 만들까요? –

답변

4

@Valex는 date 필드의 색인 인 올바른 해결책을 가지고 있습니다.

나는 300 만 개의 행이 있고 성장하는 테이블이 큰 테이블이라는 점을 말씀 드리고 싶습니다. 이 쿼리는 최근 데이터가 이전 데이터보다 더 중요 함을 나타냅니다. 그렇다면 파티셔닝에 대해 배워야합니다.

파티셔닝은 큰 테이블을 더 작은 스토리지 유닛으로 분할하는 방법입니다. 쿼리가 이들 중 하나에 액세스하기 만하면 해당 데이터 만 처리를 위해 읽혀 지므로 큰 비용 절감 효과가 있습니다. 예를 들어, 데이터가 월별로 분할되었고 36 개월의 데이터가있는 경우 쿼리는 2 개월 동안 액세스해야합니다. 이는 모든 데이터를 읽는 것보다 거의 95 %의 비용 절감 효과가 있습니다.

Here은 파티셔닝에 대한 MySQL 설명서입니다.

관련 문제