[SQL] SQL-서버 성능 : 뭐, 빠른 저장 프로 시저 또는 뷰?
SQLSQL-서버 성능 : 뭐, 빠른 저장 프로 시저 또는 뷰?
빠른 SQL 서버 2005/2008, 저장 프로 시저 또는보기에 무엇입니까?
편집하다: 많은 분들이 지적했듯이, 나는 너무 막연한 것입니다. 나를 좀 더 구체적으로 시도하자. 내가 저장 프로 시저 내에서 동일한 쿼리 대보기에서 특정 쿼리에 대한 성능 차이를 알고 싶어. (나는 아직도 모든 답변을 주셔서 감사합니다 그 시점 서로 다른 기능 아웃)
해결법
-
==============================
1.저장 프로 시저 (SPS) 및 SQL 뷰는이 게시물에 명시된 여러 번 같은 다른 "짐승"입니다.
저장 프로 시저 (SPS) 및 SQL 뷰는이 게시물에 명시된 여러 번 같은 다른 "짐승"입니다.
우리는 몇 가지 제외하면 전체 동등한에있는 쿼리 계획의 캐싱, 저장 프로 시저 등, 두 가지 방법에 바인딩과 관련된 시간과 관련된 성능 고려 사항 [일반적으로 미성년자, 프린지 경우를 제외하고, 성능 현명한. 하나...
뷰는 (물론, 아마도 열팽창 계수와 다른 몇 가지 트릭), 그러나 일반적으로, 뷰는 쿼리의 선언적 형태로 연결되어 하나의 SELECT 문으로 표현 될 수 무엇으로 제한됩니다. 다른에 저장 프로 시저는 다양한 절차 형 구조 (뿐만 아니라 선언적 것)를 사용하여, 그 결과의 SP를 사용하여, 하나는 손으로 공예를 할 수있는 SQL-서버의보다 더 효율적일 수 있습니다 주어진 쿼리를 해결하는 방법 쿼리 최적화 (하나의 선언적 쿼리에 기초) 할 수 있습니다. 이러한 경우에서, SP를 훨씬 빠르게 할 수있다 (하지만 조심 ... 최적화가 매우 똑똑하고 훨씬 느린 동등한보기보다 SP를 만들기 위해 많이하지 않습니다.)
이외에도 이러한 성능 고려 사항에서, SP를 더 다재다능하고보기보다 문의 및 행동의 넓은 범위를 허용한다.
-
==============================
2.불행하게도, 그들은 짐승의 동일한 유형 아니에요.
불행하게도, 그들은 짐승의 동일한 유형 아니에요.
저장 프로시 저는 T-SQL 문 세트이며, 데이터를 반환 할 수 있습니다. 그것은 논리의 모든 종류를 수행 할 수 있으며, 반드시 결과 집합의 데이터를 반환하지 않습니다.
뷰는 데이터의 표현이다. 그것은 주로 조인 기본으로 하나 개 이상의 테이블의 추상화로 사용됩니다. 항상 0 개, 1 개 또는 여러 행의 결과 집합입니다.
나는 당신의 질문의 라인을 따라 더 생각 :
-
==============================
3.이건 정말 답이 모든 경우에 성립됩니다에 답할 질문이 아니다. 그러나, SQL 서버 특정의 implementaion에 대한 일반적인 답변으로 ...
이건 정말 답이 모든 경우에 성립됩니다에 답할 질문이 아니다. 그러나, SQL 서버 특정의 implementaion에 대한 일반적인 답변으로 ...
저장 프로 시저가있을 때 서버가 저장하고 처음 실행 최적화 모든 종류의 않기 때문에 일반적으로, 저장 프로 시저 빠르게 직접 SQL 문에 비해되는 좋은 기회를 의미합니다.
뷰는 기본적으로 저장된 SQL 문입니다.
따라서, 나는 각각의 SQL 문이 동일한 경우, 그리고 SQL 문을 최적화 혜택을 누릴 수 있습니다 경우 일반적으로 저장 프로 시저 가능성이 더 빨리보기보다하는 것이라고 말할 것입니다. 그렇지 않으면, 일반적으로, 그들은 성능이 유사하다.
내 대답을 지원하는이 링크 문서를 참조.
http://www.sql-server-performance.com/tips/stored_procedures_p1.aspx
http://msdn.microsoft.com/en-us/library/ms998577.aspx
당신은 SQL Server의 성능 최적화에 모든 방법을 찾고 있다면 또한, 위의 두 번째 링크는 시작하기에 좋은 장소입니다.
-
==============================
4.데이터를 더 잘 제어를 허용하기 때문에 당신이 그것을 여러 SQL-명령을 실행할 수 있습니다, 좋은를 구축 보안 모듈 식 시스템을 다음 저장 프로 시저를 사용하려는 경우 나, 저장 프로 시저를 선호, 흐름 제어 문을 가지고 있으며, 매개 변수를 사용할 수 있습니다. 모든 것은 당신이 저장 프로 시저에서 할 수있는 뷰에서 할 수 있습니다. 그러나 저장 프로 시저, 당신은 훨씬 더 유연하게 할 수 있습니다.
데이터를 더 잘 제어를 허용하기 때문에 당신이 그것을 여러 SQL-명령을 실행할 수 있습니다, 좋은를 구축 보안 모듈 식 시스템을 다음 저장 프로 시저를 사용하려는 경우 나, 저장 프로 시저를 선호, 흐름 제어 문을 가지고 있으며, 매개 변수를 사용할 수 있습니다. 모든 것은 당신이 저장 프로 시저에서 할 수있는 뷰에서 할 수 있습니다. 그러나 저장 프로 시저, 당신은 훨씬 더 유연하게 할 수 있습니다.
-
==============================
5.즉, 일부 복잡한 쿼리 내 경험을 바탕으로, 저장 프로 시저 기능보다 더 나은 성능을 제공합니다.
즉, 일부 복잡한 쿼리 내 경험을 바탕으로, 저장 프로 시저 기능보다 더 나은 성능을 제공합니다.
하지만 당신은 선택에 저장 프로 시저의 결과를 사용하거나 쿼리에 참가할 수 없습니다.
다른 쿼리의 결과 집합을 사용하지 않으려면, 더 나은 SP를 사용합니다.
그리고 자세한 내용과 차이의 나머지 사람들이 포럼에서 다른 곳으로 언급된다.
-
==============================
6.내가 생각하는 또 다른 방법은 뷰를 선택하는 저장 프로 시저를 사용하는 것입니다 믿습니다. 이 아키텍처 느슨하게 연결된 시스템을 만들 것입니다. 당신이 미래의 스키마를 변경하려는 경우, 당신은 프런트 엔드를 깰 것 많은 '너무'걱정할 필요가 없습니다.
내가 생각하는 또 다른 방법은 뷰를 선택하는 저장 프로 시저를 사용하는 것입니다 믿습니다. 이 아키텍처 느슨하게 연결된 시스템을 만들 것입니다. 당신이 미래의 스키마를 변경하려는 경우, 당신은 프런트 엔드를 깰 것 많은 '너무'걱정할 필요가 없습니다.
나는 무슨 말인지하는 SP와 전망을 생각하는 대신 뷰 대 특검팀의 추측 :)
-
==============================
7.저장 프로 시저 및 뷰는 다른 다른 목적이있다. 나는 통조림 쿼리로 전망 봐. 나는 코드 모듈과 같은 저장 프로 시저를 봐주세요.
저장 프로 시저 및 뷰는 다른 다른 목적이있다. 나는 통조림 쿼리로 전망 봐. 나는 코드 모듈과 같은 저장 프로 시저를 봐주세요.
생년월일 (DateOfBirth) 및 MaleFemale 예는하지 말라의 당신이 (다른 사람의 사이에서)이 두 열이있는 테이블이라고 tblEmployees을 말한다.
필터링 viewEmployeesMale라는보기는 남성 직원은 매우 유용 할 수 있습니다. viewEmployeesFemale라는 전망도 매우 유용합니다. 이러한 뷰는 모두 자기 설명하고 매우 직관적이다.
이제, 25 및 30 세 사이의 모든 남성 직원이 내가이 결과를 생산하는 저장 프로 시저를 생성하는 경향이 목록을 생산하기 위해 필요하다고 할 수 있습니다. 그것이 가장 확실하게보기로 구축 할 수 있지만, 제 생각에 저장 프로 시저가 더 나은이 처리에 적합합니다. 널 (null)이 요소가 매우 까다로운 될 수 있습니다 특히 날짜 조작.
-
==============================
8.몇 가지 다른 고려 사항 : SP에와 볼 사이의 성능은 기본적으로 있지만 같은, SP가 당신에게 같은 쿼리에 대한 더 많은 유연성을 제공 (그들은 선택 동일한 수행 주어).
몇 가지 다른 고려 사항 : SP에와 볼 사이의 성능은 기본적으로 있지만 같은, SP가 당신에게 같은 쿼리에 대한 더 많은 유연성을 제공 (그들은 선택 동일한 수행 주어).
-
==============================
9.나는이 "토론"이 점을 설정하기로되어 있지 않다 알고 있지만, 나는이 매우 관심이 그냥 댓글 모두 특히 참조하여, 내가 특정 상황의 내 경험적인 관찰을 공유하고자하는 상태 그 이상 저장 프로 시저 및 뷰 내에서 실행되는 해당 SELECT 문은 광범위하게 동일한 성능을 가져야한다.
나는이 "토론"이 점을 설정하기로되어 있지 않다 알고 있지만, 나는이 매우 관심이 그냥 댓글 모두 특히 참조하여, 내가 특정 상황의 내 경험적인 관찰을 공유하고자하는 상태 그 이상 저장 프로 시저 및 뷰 내에서 실행되는 해당 SELECT 문은 광범위하게 동일한 성능을 가져야한다.
나는 별도의 데이터베이스 (DB "B") 5 개 테이블을 조인 데이터베이스 "A"에서 볼 수 있습니다. 내가보기에서 * SSMS에서 "A"를 DB 및 SELECT에 부착 할 경우 소요>로 3 분 250,000 행을 반환합니다. 내가보기의 디자인 페이지에서 select 문을 가지고 SSMS에서 직접 실행하면, <25초 걸립니다. 내가 그 프로 시저를 실행할 때 저장 프로 시저에 같은 SELECT 문을 두는 것은 동일한 성능을 제공합니다.
절대 성능에 어떤 관찰을하지 않고 (dB는 "B는"우리가 터치에 허용되지 않습니다 도끼 데이터베이스입니다!), 나는 여전히 절대적으로 SP를 사용하여이 경우 크기 순서가 빠른보기로를 사용하는 것보다 확신 동일한 데이터를 검색하고, 이는 특히이 경우 많은 다른 유사한 뷰에 적용된다.
나는 선택이하는 반면보기를 사용하여 어떻게 든 연결을 캐시하지 않는 한 나는 반복적으로 같은 SSMS 창에서이 개 선택 사이를 전환 할 수 있기 때문에, 다른 DB에 연결을 만드는 함께 할 수있는 그것의 아무것도 생각하지 않고 각 쿼리의 성능이 일관성을 유지. 내가 심판 .... "B"를을 DB와는 dbname.dbo없이 선택 실행에 직접 연결하는 경우 또한, 같은 시간이 걸립니다.
어떤 생각 누구?
-
==============================
10.발견 상세한 성능 분석 : https://www.scarydba.com/2016/11/01/stored-procedures-not-faster-views/
발견 상세한 성능 분석 : https://www.scarydba.com/2016/11/01/stored-procedures-not-faster-views/
컴파일 시간 비교 :
컴파일 시간을 포함하여 실행 시간에 대해 무엇을하는가 있기 때문에 차:
결론:
from https://stackoverflow.com/questions/1603853/sql-server-performance-what-is-faster-a-stored-procedure-or-a-view by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 최적의 SQL 방법은 무엇입니까 : SELECT 문 다음 행의 수를 필요하십니까? (0) | 2020.06.26 |
---|---|
[SQL] 동적 SQL은 무엇인가? (0) | 2020.06.26 |
[SQL] 어떻게 SQL Server의 다른 데이터베이스에서 테이블의 데이터를 선택하려면? (0) | 2020.06.26 |
[SQL] SQL 구문을 사용하여 MySQL의 테이블에서 마지막 레코드를 선택하는 방법 (0) | 2020.06.26 |
[SQL] 비트 필드에 MIN 집계 함수를 적용 (0) | 2020.06.26 |