동료 중 한 명이 SQL Server 2008 R2 데이터베이스에 저장 프로 시저를 명명했습니다 sp_something
. 나는 이것을보고 즉시 생각했다 : "그게 잘못이야!" 이 온라인 기사에 대한 내 책갈피를 검색하여 왜 그것이 틀린지 설명하므로 동료에게 설명을 제공 할 수 있습니다.
이 글 ( Brian Moran 의 기사 )에서는 저장 프로 시저에 sp_ 접두사를 지정하면 SQL Server가 컴파일 된 계획에 대한 마스터 데이터베이스를 확인하게됩니다. 이 파일 sp_sproc
이 존재하지 않기 때문에 SQL Server는 프로 시저를 다시 컴파일합니다 (그리고 성능 문제를 일으키는 독점 컴파일 잠금이 필요함).
다음 예제는 두 절차의 차이점을 보여주기 위해 기사에 제공됩니다.
USE tempdb;
GO
CREATE PROCEDURE dbo.Select1 AS SELECT 1;
GO
CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1;
GO
EXEC dbo.sp_Select1;
GO
EXEC dbo.Select1;
GO
이를 실행 한 다음 프로파일 러를 열고 (저장 프로 시저-> SP:CacheMiss
이벤트 추가 ) 저장 프로 시저를 다시 실행하십시오. 두 저장 프로 시저의 차이점을 알아야합니다. sp_Select1
저장 프로시 저는 저장 프로 시저 SP:CacheMiss
보다 하나 이상의 이벤트 를 생성 Select1
합니다 (이 기사는 SQL Server 7.0 및 SQL Server 2000 참조 ).
SQL Server 2008 R2 환경에서 예제를 실행하면 SP:CacheMiss
두 프로 시저 (tempdb 및 다른 테스트 데이터베이스 모두)에 대해 동일한 양의 이벤트 가 발생합니다.
그래서 궁금합니다.
- 예제를 실행할 때 잘못된 일을 할 수 있습니까?
'사용자 이름을 지정하지 마십시오sproc sp_something
'adagium이 최신 버전의 SQL Server에서도 여전히 유효합니까?- 그렇다면 SQL Server 2008 R2의 유효성을 보여주는 좋은 예가 있습니까?
이것에 대한 당신의 생각에 감사드립니다!
편집하다
SQL Server 2008 R2의 msdn에서 저장 프로 시저 만들기 (데이터베이스 엔진) 를 찾았습니다 .
sp_를 접두사로 사용하여 저장 프로 시저를 만들지 않는 것이 좋습니다. SQL Server는 sp_ 접두사를 사용하여 시스템 저장 프로 시저를 지정합니다. 선택한 이름이 향후 시스템 절차와 충돌 할 수 있습니다. [...]
접두사 를 사용하여 발생하는 성능 문제 에 대해서는 언급되지 sp_
않았습니다. 그래도 여전히 그렇거나 SQL Server 2000 이후에 수정했는지 알고 싶습니다.
sp_
있습니까? 이것은 테이블에 접두사를 붙이는 것만 큼 유용합니다 tbl
. 이 의미없는 명명 규칙을 사용할 수 있도록 시스템 검색 마스터를 먼저 만드는 이유는 무엇입니까?
dbo.sp_Author_Rename
보다 더 나은 이유를 설명하게한다 dbo.Author_Rename
. 말이되는 하나의 생각은 할 수 없습니다.
sp_
버전 을 해결하는 데 약간의 오버 헤드를 줄였습니다 (마스터 DB와 사용자 데이터베이스를 체크인해야 함master
-> 사용자 DB의 procs-> 비 시스템) procs inmaster
)