2011-05-06 5 views
0

많은 복잡한 쿼리가 있으며 그 결과는 MySQL 뷰에 저장됩니다. 문제는 MySQL 뷰가 성능면에서 어려움을 겪고 있다는 것입니다. 크론 채워 user_reports 테이블에 쿼리를 할 때MySQL은 cron 작업을 사용하거나 테이블을 사용하여 테이블을 만듭니다.

DROP TABLE user_reports; 
CREATE TABLE user_reports 
    SELECT col1, col2, col3 FROM 
    /** COMPLEX QUERY **/ 
; 

지금, 쿼리가 거의 걸릴 :

는 I의 의견이 채워 것과 동일한 데이터 표준 테이블을 채우는 cron 작업을 설정 동일한 시간대에 비해을 쿼리하는 데 10 분의 1이 걸립니다.

이 방법이 일반적인 방법입니까? 분명히 CRON 작업이 실행될 때마다 서버에 약간의 부담이 있으며 이는 데이터를 사용할 수 없음을 의미합니다. live.

시간 view_user_reports = 0.018 초

를 조회하는 데 걸리는 user_reports = 0.002 초
시간을 조회 촬영이 모두 말했다, 응용 프로그램 코드에서 실행해야 실행 0.018 초 정도 걸립니다 어쩌면 쿼리, 뷰에 저장되는 것이 아니라? 나는 cron-driven 방법뿐만 아니라 확장 할 것이라고 생각하지 않지만.

+0

기본적으로 여러 테이블의 다양한 조인의 결과 인 뷰가 있습니다. 그런 다음 뷰를 쿼리하면 18 밀리 초가 걸리므로 만족스럽지 않으므로 정확하게 수행하기로 결정 했습니까? 어디에서 데이터로 채워지는 새 테이블을 만드시겠습니까?어떻게 채웠 니? 보고서에서 쿼리에 대해 EXPLAIN을 실행하여 병목 상태를 확인 했습니까? 조인 된 테이블을 쿼리하는 것은 복잡한 WHERE 절이있는 단일 테이블을 쿼리하는 것보다 항상 느립니다. –

답변

1

MySQL의 뷰

아 님에 저장된 된 결과. MySQL 뷰는 데이터를 저장하지 않는다.

DROP TABLE user_reports;

은 ...와 ....

TRUNCATE TABLE user_reports; 

잘못을 표 user_reports

를 만드시겠습니까?

나는 그것이 크론 구동 방법뿐만 아니라 확장 할 것이라고 생각하지 않는다

만만큼 cron 작업에 쿼리를 실행하는 데 오래 걸리지 않는 한 - 당신을 수행 할 때 사전 처리 된 결과 세트에 점진적으로 데이터를 추가하는 것에 대해 생각해 볼 필요가 있습니다. 그러나 0.018 초에 이것은 단지 조숙 한 최적화 일뿐입니다.

+0

이런 식으로 데이터를 사전 처리하는 것이 일반적입니다. 다행히도 이것이 집중적이라고 생각하지 않았기 때문에 0.018 초를 언급 해 주어서 다행입니다. 이것은 많은 프로젝트에서 나에게 유용 할 것이다. – dianovich

1

대부분의 경우 18ms db 검색은 성능에 나쁜 영향을 미치지 않습니다. 그렇다면 어떤 종류의 캐싱을 사용하는 것이 일반적입니다. 데이터 검색을 할 수 있어야하고 데이터가 사소한 것이라면 괜찮습니다. 그러면 접근 방법이 좋습니다.

데이터를 검색 할 필요가없는 경우 캐시를 메모리 나 파일에 직접 저장할 수 있으며 클라이언트에 전달할 때와 동일한 형식으로 저장할 수 있습니다.

관련 문제