2009-03-25 3 views
27

MySQL은 저장 프로 시저를 지원하기 시작 했으므로 실제로 사용하지 않았습니다. 부분적으로 저는 훌륭한 쿼리 작성자가 아니기 때문에 부분적으로는 제가 종종 내가 아는 것만으로도 그 선택을하는 DBA와 함께 일하기 때문입니다.MySQL : Views 대 저장 프로 시저

특히 데이터의 선택을 본질적으로 de-normalization (조인) 및 집계 (avg 또는 max, subqueries w/counts 등)하는 선택을 고려할 때 데이터 선택의 관점에서 MySQL 5.x? 관점? 아니면 저장 프로 시저?

보기 내가보기에 SELECT 쿼리가 어떻게 생겼는지 알면 알기 쉽게 색인을 생성하고 기타 등등 확인한 다음 CREATE VIEW [View] AS SELECT [...]을 작성하십시오. 그런 다음 내 응용 프로그램에서 뷰를 읽기 전용 테이블로 취급합니다. 이는 정규화 된 데이터의 비정규 화 된 버전을 나타냅니다.

여기서 단점은 무엇입니까? 그리고 똑같은 SELECT 문을 저장 프로 시저로 옮기면 무엇이 변경 될 것입니까 (손익)?

나는이 주제를 인터넷 검색하는 동안 찾을 수 없었던 좋은 '속편'정보를 찾고 싶지만 실제로 모든 의견과 답변을 환영합니다.

+2

이 게시물을 찾은 사람에게이 답변이 매우 적합하다고 생각하지 않는 사용자를 위해 [MSDN Social] (http://social.msdn.microsoft.com/Forums)에 대한 훌륭한 해설이 있습니다./en-US/sqlgetstarted/thread/64e834bc-c473-41dc-bb3c-6fd3bcfa0d57)을 사용하면 기본 사항을보다 확실하게 이해하는 데 도움이됩니다. – Chiramisu

답변

12

여러 응용 프로그램간에 동일한 루틴을 사용해야하거나 데이터베이스 또는 테이블 간의 ETL에 대해서만 저장 프로 시저를 사용해야하는 것은 아닙니다. 기본적으로 DRY 원칙을 실행할 때까지 가능한 한 많은 코드를 실행하거나 DB 내의 한 위치에서 다른 위치로 데이터를 단순히 이동하는 것입니다.

보기를 사용하여 대체 또는 단순화 된 "보기"를 데이터에 제공 할 수 있습니다. 따라서 다른 방법으로 데이터를 표시하는 것처럼 실제로 데이터를 조작하지 않는 관점에서 볼 것입니다.

+0

100k를 넘는 레코드로 데이터 세트를 실행하고 하위 세트에서'COUNT (*) '를 사용해야 할 때까지는 좋은 결과입니다. 저장 프로시 저는 때로는 필요에 따라 데이터를 수집하는데도 적합합니다. –

3

둘 중 하나 인 지 확실하지 않습니다. 스토어드 프로 시저는 뷰가 어려워 질 수있는 다양한 작업을 수행 할 수 있습니다. 임시 테이블에서 데이터를 채운 다음 커서를 올려 놓은 다음 집계를 수행하고 결과 집합을 반환합니다.

뷰는 복잡한 SQL/액세스 권한을 숨기고 스키마의 수정 된보기를 표시 할 수 있습니다.

둘 다 사물의 구성표에 장소가 있고 둘 다 성공적인 스키마 구현에 유용하다고 생각합니다.

4

필자는 필터링, 데이터 조작 (매개 변수 입력이 필요한 것) 또는 반복 (커서)을 위해 비표준 또는 출력 형식 및 저장 프로 시저에 대한 뷰를 사용합니다.

비정규 화와 필터링이 모두 필요할 때 저장 프로 시저 내부의보기에 자주 액세스합니다.

2

최소한 mysql보기 결과는 임시 테이블에 저장되며 대부분의 알맞은 데이터베이스 엔진과 달리이 테이블은 인덱싱되지 않으므로 쿼리를 단순화하기 위해 사용하는 경우 프로그램이 실행될 때보기가 훌륭합니다. 보기의 결과를 모두 가져 오십시오. 그러나 매개 변수를 기반으로보기의 결과를 검색하는 경우 엄청나게 느려집니다. 특히 수백만 개의 레코드가있는 경우에는보기가 다른보기 위에 작성되는 경우 더욱 심각합니다. 등등.

저장 프로 시저 그러나 이러한 검색 매개 변수를 전달할 수 있으며 밑줄이있는 (인덱싱 된) 테이블에 대해 쿼리를 직접 실행할 수 있습니다. 단점은 프로 시저가 실행될 때마다 결과를 가져와야하며 서버 구성에 따라보기와 함께 발생할 수도 있습니다.

기본적으로보기를 사용하는 경우 검색 결과를 최소화해야하는 경우 저장 프로 시저를 사용하십시오.