2010-07-12 2 views
1

이번에는 좀 더 일반적인 질문이 있습니다. 원래 데이터가 주기적으로 업데이트되는 경우 데이터의 가중 집계를 위해 저장 프로 시저가 아닌 여러보기를 사용해야합니까?디 - 정규화, MySQL의 업데이트 된 테이블에 대한 가중 집계

기본적으로 더 큰 트랜잭션 데이터베이스에서 같은 종류의 데이터 (테이블)를 가져 와서 주기적으로 업데이트되는 로컬 MySQL 데이터베이스가 있습니다.

로컬 데이터베이스는 통계 분석에 사용됩니다. 따라서 통계 소프트웨어 패키지와 함께 사용하기 위해 데이터를 로컬에서 역 정규화 (기본적으로 집계)합니다. 지금까지 저장 프로 시저를 사용했는데, 가중치 체계 (기본적으로 변수가 곱해진 가중치를 포함하는 다른 테이블)가 작동 할 때 처리하기가 쉽고 (더 명확하게 배열되어 있음) 느꼈기 때문입니다.

저장 프로 시저의 단점은 테이블에 새로운 데이터가 채워질 때 다시 실행된다는 것입니다. 분명히 나는 ​​DBA가 아니다 ... 그래서 명백한 것을 언급하는 것에서 벗어나지 말라. 이런 종류의 시나리오를 처리하는 가장 좋은 방법은 무엇인가? SP 또는 전망? 아니면 완전히 다른 무엇인가?

thx 미리 제안 해주세요.

답변

1

(이것은 "일반적인"질문에 대한 일반적인 대답일까요? :)). 최상의 솔루션이 사용자의 요구에 적합한 지 확인하기 위해 장단점을 평가해야합니다.

Views은 기본적으로 쿼리를 다시 작성하므로 (MySQL에서는) 쿼리를 실행할 때마다 뷰를 사용하여 집계/비정규 화를 수행합니다. 그러면 쿼리 속도가 느려질 수 있습니다. 또한, 당신의 절차가 정말로 복잡하다면, 그 논리를보기에 넣으려고 시도하는 것이 실용적이지 않을 수도 있습니다.

Stored procedures 검색어가 더 빨라집니다. 하지만 업데이트가 자동으로 표시되지 않습니다. 따라서 데이터가 얼마나 자주 변경되는지, 쿼리가 실행되는 빈도 및 쿼리의 성능이 얼마나 중요한지에 따라 대답이 달라집니다.

데이터 업데이트가 정기적이고 절차를 실행하는 수동 작업에서 직접 저장하려고하는 경우 대체 제안 사항으로 events을 사용하여 저장 프로 시저를 실행할 수도 있습니다.

또 다른 옵션은 역 정규화/집계 테이블을 triggers으로 업데이트하는 것입니다. 원본 테이블에서 데이터를 업데이트하면 트리거가 자동으로 집계 테이블을 최신 상태로 유지합니다.

Here은 저장 프로 시저, 뷰, 트리거 및 이벤트에 대한 문서에 대한 링크입니다.

+0

와우, 정말 도움이됩니다. 나는 정말로 좀 더 의존적 인 답변/의견을 얻길 바랍니다. 네이선! –

+0

사실 나는 하나 이상의 sp를 가지고 있습니다. 아마도 내 경우에는 한 sp에 그들을 합산 (즉, 다른 sp 안에 여러 sp를 사용). 반면에 나는 성능 문제를 기대하지 않는다. 테이블은 작지 만 최대 10,000 줄까지 수용 할 수있다. –

+0

테이블이 작 으면보기를 사용하여 성능상의 문제가 없어야합니다. – nathan