저장 프로 시저 대. 견해
나는 둘 다 사용했지만 명확하지 않은 것은 내가 다른 하나를 선호해야 할 때입니다. 내 말은 저장 프로 시저가 매개 변수를받을 수 있다는 것을 알고 있지만 실제로 뷰를 사용하여 동일한 작업을 수행 할 수 있습니까?
그렇다면 성능 및 기타 측면을 고려할 때 언제, 왜 다른 것보다 선호해야합니까?
글쎄, 코드 캡슐화 및 권한 제어를 위해 stored proc을 사용하는 것이 좋습니다.
뷰는 실제로 캡슐화되지 않습니다. 확장되는 매크로입니다. 곧 뷰에 참여하기 시작하면 끔찍한 쿼리가 발생할 것입니다. 예 그들은 가입 할 수 있지만 가입해서는 안됩니다 ..
즉, 뷰는 저장된 procs와 같은 위치 (예 : 인덱싱 된 뷰)를 갖는 도구입니다.
뷰의 장점은 테이블처럼 취급 할 수 있다는 것입니다. WHERE를 사용하여 필터링 된 데이터를 가져오고, JOIN 등을 할 수 있습니다. 충분히 간단한 경우 데이터를 삽입 할 수도 있습니다. 뷰를 사용하면 저장 프로 시저와 달리 결과를 인덱싱 할 수도 있습니다.
뷰는 저장된 단일 쿼리 문과 같으며 복잡한 논리 또는 여러 문을 포함 할 수 없습니다 (union 등의 사용을 넘어서). 매개 변수를 통해 복잡하거나 사용자 정의 할 수있는 경우 훨씬 더 큰 유연성을 허용하는 저장 프로 시저를 선택합니다.
데이터베이스 아키텍처에서 뷰와 저장 프로 시저의 조합을 사용하는 것이 일반적이며 아마도 매우 다른 이유로 사용됩니다. 때로는 스키마가 다시 엔지니어링 될 때 sprocs에서 하위 호환성을 달성하고, 때로는 데이터가 기본적으로 테이블에 저장되는 방식 (비명 명화보기)에 비해 더 조작 가능하게 만듭니다.
뷰를 많이 사용하면 SQL Server에서 이러한 쿼리를 최적화하기가 더 어려워 성능이 저하 될 수 있습니다. 그러나 인덱싱 된 테이블과 동일한 방식으로 조인으로 작업 할 때 실제로 성능을 향상시킬 수있는 인덱싱 된 뷰를 사용할 수 있습니다. 인덱싱 된 뷰를 구현할 때 허용되는 구문에 훨씬 더 엄격한 제한이 있으며 SQL Server 버전에 따라 실제로 작동하도록하는 데 많은 미묘함이 있습니다.
뷰는 저장 프로 시저보다 테이블에 가깝다고 생각하십시오.
저장 프로 시저의 주요 장점은 논리 (스크립팅)를 통합 할 수 있다는 것입니다. 이 논리는 IF / ELSE처럼 간단하거나 DO WHILE 루프, SWITCH / CASE와 같이 더 복잡 할 수 있습니다.
저장 프로 시저의 사용을 데이터베이스와의 송수신 트랜잭션의 필요성과 연관시킵니다. 즉, 데이터베이스로 데이터를 보내야 할 때마다 저장 프로 시저를 사용합니다. 데이터를 업데이트하거나 내 응용 프로그램에서 사용할 정보를 데이터베이스에 쿼리하려는 경우에도 마찬가지입니다.
데이터베이스보기는 주어진 테이블에서 필드의 하위 집합을 제공하고 MS Access 사용자가 데이터를 수정할 위험없이 데이터를 볼 수 있도록 허용하고 보고서가 예측 된 결과를 생성하도록하려는 경우에 유용합니다.
뷰는 특정 테이블 조합이 있거나 지속적으로 쿼리하려는 데이터의 하위 집합이있는 경우에 유용합니다 (예 : 권한으로 조인 된 사용자). 실제로 뷰는 테이블로 취급되어야합니다.
저장 프로시 저는 임의의 다른 쿼리보다 최적으로 실행되도록 '컴파일'되는 SQL 코드 조각입니다. 저장 프로 시저에서 SQL 코드의 실행 계획이 이미 구축되어 있으므로 실행이 일반 SQL 문보다 약간 더 원활하게 실행됩니다.
두 가지 근거.
삽입이 가능하지 않도록하려면보기 대신 저장 프로 시저를 사용하십시오. 보기에 삽입하면 수행하는 작업이 제공되지 않을 수 있습니다. 뷰의 쿼리와 일치하지 않을 수있는 행, 뷰에 나타나지 않는 행을 테이블에 삽입합니다. 어딘가에 삽입되었지만 진술이 보이는 곳은 아닙니다.
다른 저장 프로 시저의 저장 프로 시저 결과를 사용할 수없는 경우 뷰를 사용하십시오 (최소한 MySQL에서는 후자가 작동하도록 만들 수 없었습니다).
참고 URL : https://stackoverflow.com/questions/3773277/stored-procedures-vs-views
'Programing' 카테고리의 다른 글
자동 업데이트는 어떻게 구현해야합니까? (0) | 2020.11.25 |
---|---|
PowerShell에서 "종료"란 정확히 무엇입니까? (0) | 2020.11.25 |
유니폼의 GLSL 배열 만들기? (0) | 2020.11.25 |
C ++에서 부호없는 double? (0) | 2020.11.25 |
Azure SQL Database 웹 대 비즈니스 에디션 (0) | 2020.11.25 |