저는 현재 매우 잘 수행되지 않는 분석 시스템을 구현했습니다. 시간별 통계 (stats_id, FILE_ID 시간) 표 2에 대한 기록을 포함합니다 : 8 백만 행을 포함 그것을 설명하기 위해 나는 테이블 구조는 내가 두 InnoDB의 테이블 최적화를위한 웹 로그 분석
표가
이를 쿼리 설명 할 필요가있다.
표 2 구조는
는 내가 뭘하려고 FILE_ID에 의해 주어진 기간에 대한 hourly_stats에서 전체보기 및 그룹화 기록을 계산하는 다음의 I/추가)
full_stats (
stats_id Int
file_id Int
stats_week Int
stats_month Int
stats_year Int
stats_time DATETIME
입니다 full_stats 테이블로 레코드를 갱신하십시오. 평균적으로 한 행을 처리하는 데 1-2 분이 소요됩니다. 더 나은 성능을 위해 쿼리를 최적화하려고합니다. 여기
내가 뭐하는 거지입니다
이미 존재하지 않는 것으로되어 주어진 주, 월, 년 40 %의 가능성에 대한 full_stats에 존재 FILE_ID 60 %의 가능성이 있습니다.
그래서 첫 번째 쿼리에 나는 제로 나는이 레코드를 삽입한다 영향을받는 행 만약 내가 확인 쿼리 그 이후
UPDATE full_stats
SET total_views=XXX
WHERE stats_week=XX stats_month=X
AND stats_year=YYYY
다음 사용하여 레코드를 업데이트하려고합니다. 삽입 또는 업데이트가 완료되면 hourly_stats의 레코드는 file_id 및 주어진 기간에 따라 제거됩니다.
쿼리를 최적화하고 잠금 속도를 줄이는 방법에 대한 제안 사항을 제공해 줄 수 있습니까?
이 테이블에 어떤 종류의 색인을 설정 했습니까? – FrustratedWithFormsDesigner
SSD를 RAID 어레이에 조인하면 I/O 속도가 빨라집니다. 진심으로? 색인이 추가되는 한 빨리 수행 할 수 있습니다. 모든 최적화는이 경우 성능을 향상시키지 않습니다. 어쩌면 당신은 시스템의 전체적인 재 설계를보고있을 것입니다. 단 한 지점을 밀어 넣으면 다른 지점을 잃게되고, 더 잘 할 수있는 것을 알아 내기위한 세부 사항이 너무 적기 때문에 여기에 단서를 줄 수는 없습니다. – AlexanderMP
나는 주, 월, 년에 색인을 추가하려했지만 성능이 매우 느려서 제거해야했습니다. – Maximus