아마도 질문을 뒤집어 저장 프로 시저 만 수행 할 수 있는 사용 사례, 달성하려는 작업을 찾는 것이 합리적 입니다. 아마도 저장 프로 시저가 눈에 띄는 사용 사례가있을 수 있습니다.
차이가 있다면 MSSQL과 Entity Framework를 사용하고 있습니다.
EF에 대한 나의 지식은 제한하지만, 지금까지의 내가 볼 수 있듯이, EF는 (입니다 만 다른 같은)을 ORM; 그리고 다행히도 사용 가능한 원료를 SQL .
내가 당신의 두 가지 중요한 점을 취한다면 :
실행하는 데 몇 분이 걸리는 복잡한 보고서 (웹 응용 프로그램의 페이지) LINQ가 제공하는 것보다 훨씬 효율적인 SQL을 작성할 수 있다는 것을 알았습니다.
보고서를 작성할 때 LINQ / EF 가 부족해졌습니다. 그리고 알다시피, SQL
ORM을 사용하는 것보다 훨씬 빠릅니다. 그러나 저장 프로 시저를 선호하거나 모든 것에 ORM 을 사용하는 것에 대해서만 이것을 말 합니까?
SQL로 문제를 분명히 해결할 수 있습니다. 해당 쿼리가 코드베이스에 저장되고 버전이 제어되는 경우 예제에 따라 차이가 없습니다 .
웹 응용 프로그램은 응용 프로그램과 관련이없는 다른 중요한 정보가 많이 포함 된 별도의 데이터베이스에서 몇 개의 테이블을 읽고 쓸 필요가있었습니다. 모든 것에 액세스하는 대신 필요한 것만 수행하고 제한된 정보 만 반환하는 저장 프로 시저를 사용했습니다. 그런 다음 웹 응용 프로그램은 테이블 등에 액세스하지 않고도이 저장 프로 시저에만 액세스 할 수 있습니다.
간단한 연결 문자열 과 UPDATE 및 문제가 완료되었습니다. 이 문제는 해결 될 수 도 와 ORM :
단순히 다른 DB의 앞에 웹 서비스를 사용하고 동일한 compartementalization / 분리가 이루어진다.
그래서 여기서 볼 것이 없습니다.
다른 사람들이 한 몇 가지 요점을 살펴보면 다음과 같습니다.
EF의 기능을 사용하여 트랜잭션에 쉽게 랩핑 할 수없는 복잡한 작업 단위 (아마도 많은 테이블 포함)가 있습니다.
그러나 그렇게 SQL
할 수 있습니다. 여기에 마법이 없습니다 .
데이터베이스가 EF에서 잘 작동하지 않습니다
다시 : 적절한 경우 EF를 사용하십시오 .
연결된 서버와 서버 경계를 넘는 데이터로 작업해야합니다.
저장 프로 시저가 어떻게 도움이되는지 모르겠습니다. 따라서 저장 프로 시저의 이점을 볼 수 없습니다 . 그러나 누군가는 그것에 대해 약간의 빛을 비출 것입니다.
적절한 성능을 보장하기 위해 "베어 메탈"SQL이 필요한 매우 복잡한 데이터 검색 시나리오가 있습니다.
" EF의 경계 ".
응용 프로그램에 테이블에 대한 전체 CRUD 권한이 없지만 서버가 신뢰하는 보안 컨텍스트에서 응용 프로그램을 실행할 수 있습니다.
괜찮아. 나는 아마 함께 간다 .
지금까지 저장 프로 시저에 찬성 하여 절반 만 만들었습니다.
아마도 저장 프로 시저를 선호하는 성능 고려 사항이있을 수 있습니다.
1) 쿼리를 저장 하면 저장 프로 시저를 간단하게 호출하여 복잡성을 캡슐화 할 수 있다는 이점 이 있습니다. 쿼리 플래너는 쿼리를 알고 있으므로 최적화하기가 "쉽습니다". 그러나 현재 정교한 쿼리 플래너 _minimal을 사용하면 비용을 절감 할 수 있습니다.
또한 임시 쿼리를 사용하는 데 약간의 비용이 들더 라도 데이터가 잘 구성되고 신중하게 색인이 생성 된 경우 데이터베이스 는 응용 프로그램 의 병목 현상 일뿐 입니다. 따라서 델타가 작더라도 다른 요인을 고려하면 무시할 수 있습니다.
2) 그럼에도 불구하고 복잡한 쿼리를 DB 에 저장한다고 주장했습니다 . 고려해야 할 두 가지가 있습니다.
a) 복잡한 쿼리는 DB 인프라를 많이 사용하므로 다른 모든 쿼리의 시간이 늘어납니다. 많은 비용이 드는 쿼리를 병렬로 실행할 수 없습니다 . 이것은 프로 스토어드 또는 콘트라스트 스토어드 프로 시저가 아니라 복잡한 쿼리 에 대해 말합니다 .
b) 쿼리에 시간이 걸리면 저장 프로 시저에서 작은 속도로 승리하는 이유가 무엇입니까?
tl; dr
저장 프로 시저 에 대해 직접적으로 말하는 것은 없습니다 . 따라서 저장 프로 시저를 사용하는 것이 좋습니다.
그러나 다른 한편으로는 : 나는 명백하게 찬성 하는 적절한 유스 케이스 를 상상할 수 없었다 .
저장 프로시 저는 언제 사용해야합니까?
정답은 다음 과 같습니다 . 그러나 다른 옵션이 있습니다.