programing

MySQL: 보기 대 저장 프로시저

lovejava 2023. 10. 11. 20:20

MySQL: 보기 대 저장 프로시저

MySQL이 저장 프로시저를 지원하기 시작한 이후로 실제로 사용해 본 적은 없습니다.부분적으로는 제가 질의 작성에 능숙하지 않기 때문이기도 하고, 부분적으로는 제가 아는 것에 만족하기 때문이기도 합니다.

데이터 선택을 수행하는 측면에서, 특히 본질적으로 비정규화(조인) 및 데이터의 집계(평균 또는 최대, 서브쿼리 w/counts 등) 선택을 고려할 때 MySQL 5.x에서 올바른 선택은 무엇입니까? 보기?아니면 저장된 절차?

을 알고 및 한 다음 합니다 - SELECT 를 하면 됩니다.CREATE VIEW [View] AS SELECT [...]그런 이 을 나타냅니다 그런 다음 애플리케이션에서 보기를 읽기 전용 테이블로 취급합니다. 보기는 정규화된 데이터의 비정규화된 버전을 나타냅니다.

여기에 단점이 있다면 무엇이 있습니까?그리고 정확히 동일한 SELECT 문을 저장 프로시저로 이동하면 어떤 변화(손익)가 있습니까?

이 주제를 구글에서 검색하는 동안 찾기 어려웠던 좋은 '언더 후드' 정보를 찾고 싶지만 모든 의견과 답변을 환영합니다.

제 생각에는 저장 프로시저는 여러 애플리케이션 간에 동일한 루틴을 사용하거나 데이터베이스 또는 테이블 간의 ETL을 사용하는 경우에만 데이터 조작을 위해 사용되어야 한다고 생각합니다.기본적으로 DRY 원칙에 도달할 때까지 코드로 가능한 한 많은 작업을 수행하거나 DB 내의 한 곳에서 다른 곳으로 데이터를 이동하는 작업을 수행합니다.

보기를 사용하여 데이터에 대체 또는 단순화된 "보기"를 제공할 수 있습니다.이와 같이, 저는 당신이 데이터를 실제로 조작하는 것이 아니라 다른 방법으로 표시하는 것을 고려할 것입니다.

그것이 선택인지 아니면 선택인지 확실하지 않습니다.저장 프로시저는 보기가 어려운 다양한 작업을 수행할 수 있습니다(임시 테이블에 데이터를 채운 다음 커서를 실행한 다음 집계를 수행하고 결과 집합을 반환한다고 생각합니다).

반면 보기는 복잡한 sql/access 권한을 숨기고 스키마의 수정된 보기를 표시할 수 있습니다.

저는 둘 다 사물의 체계에 자리를 잡고 있고 둘 다 성공적인 스키마 구현에 유용하다고 생각합니다.

저는 정규화 해제 또는 출력 포맷을 위한 뷰와 필터링 및 데이터 조작(파라미터 입력이 필요한 것들) 또는 반복(커서)을 위한 저장 프로시저를 사용합니다.

비정규화와 필터링이 모두 필요한 경우 저장 프로시저 내부의 뷰에 액세스하는 경우가 많습니다.

한 가지 주의해야 할 점은, 적어도 mysql 뷰 결과는 임시 테이블에 저장되며 대부분의 정상적인 데이터베이스 엔진과 달리 이 테이블은 인덱싱되지 않습니다. 따라서 쿼리를 단순화하기 위해 사용하는 경우 프로그램이 뷰에서 모든 결과를 가져올 때 뷰가 좋습니다. 그러나 만약 당신이 그 뷰의 결과를 검색한다면,매개변수를 기준으로 할 때, 특히 수백만 개의 레코드를 정밀 조사할 수 있는 경우에는 엄청나게 느려지고, 뷰가 다른 뷰 위에 구축되는 경우에는 더욱 더 나빠집니다.

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

따라서 기본적으로 뷰를 사용하는 경우 결과 수를 최소화하려고 하면(검색이 필요한 경우) 저장 프로시저를 사용합니다.

언급URL : https://stackoverflow.com/questions/682544/mysql-views-vs-stored-procedures