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
'programing' 카테고리의 다른 글
setInterval loop을 즉시 시작하는 방법은? (0) | 2023.10.11 |
---|---|
중앙 하나와 오른쪽/왼쪽 정렬 다른 플렉스박스 요소 (0) | 2023.10.11 |
MySql - HAPING vs WHERE (0) | 2023.10.06 |
RequireJS를 사용하여 백본 및 언더스코어 로드 (0) | 2023.10.06 |
Powershell을 사용하여 정규 분포식 결과의 하위 섹션 교체 (0) | 2023.10.06 |