별도의 스키마를 사용하면 SQL Server 2008 성능에 어떤 영향을 줍니까?


11

SQL Server 2008 데이터베이스에서 다른 목적으로 개체에 별도의 스키마를 사용하고 싶습니다. 지금 우리는 테이블 또는 저장 프로 시저의 목적을 나타 내기 위해 상당히 마음을 사로 잡는 명명 규칙을 사용하며 접두사는 고유 이름의 시작을보기 전에 5 ~ 6 개의 xharacters를 스캔해야 함을 의미합니다. UI를 구동하는 데 사용되는 테이블 (메뉴, 개인별 역할 등)과 차원 테이블과 팩트 테이블 등의 스키마에 대해 별도의 스키마를 사용하고 싶습니다.

내 질문은 여러 스키마 (schemae?)를 사용하여 성능에 영향을 미쳐 모든 것에 대한 좋은 오래된 dbo에 반대 했습니까?

답변:


4

코딩 스타일에 따라 작은 크기이지만 쿼리 최적화 프로그램의 성능에 영향을 줄 수 있습니다. 스키마가없는 테이블을 참조하는 경우 옵티마이 저는 먼저 사용자 기본 스키마 (있는 경우) 내의 테이블을 확인한 다음 dbo.를 사용하여 테이블을 식별하려고 시도한 다음 그 밖의 모든 것을 시도해야합니다. 테이블을 schema.table로 명시 적으로 참조하면 어쨌든 좋은 방법 일 수 있지만이 작은 오버 헤드도 피할 수 있습니다.


1

성능 차이가 없습니다. 그러나 스키마를 모르는 경우에도 현재 스키마를 사용하고 있습니다.

스키마로 규정 되지 않은 테이블, 스토어드 프로 시저, UDF 등과 같은 스키마 오브젝트에 대한 참조를 사용 하면 성능에 영향을 미칩니다. 참조는 항상 스키마에 의해 규정되어야합니다. 이러한 규정되지 않은 참조는 해결되어야하며 다음과 같이 발생합니다.

  • 먼저 자격 증명 세션이 설정된 사용자의 기본 스키마 (예 :)에서 이름과 유형이 같은 개체를 찾습니다 jsmith. 발견되면 해당 인스턴스가 사용됩니다.
  • 그렇지 않으면 스키마 아래에서 동일한 이름과 유형의 객체를 찾으십시오 dbo.

몇 가지 효과가 있습니다.

  • 대부분의 경우 참조가 스키마로 규정 된 경우 단일 조회가 아닌 참조를 해결하기 위해 두 개의 조회가 필요합니다.
  • 쿼리 / 저장 프로 시저 / 사용자 정의 함수가 바인딩 될 때 얻은 실행 계획은 캐시 및 재사용 될 수 없습니다.

문제가 생겼을 때만 고통스럽게 찾을 수있는 마지막 효과는 다른 사용자가 특정 쿼리 나 저장 프로 시저에서 다른 결과를 얻을 수 있다는 것입니다. 같은 뭔가 select * from foo join barDB를 소유자로 나를 위해 5 월 잘 동작; jsmith실수로 같은 데이터베이스에서 foo자신의 스키마 ( jsmith.foo)로 명명 된 테이블을 생성 한 사용자 에게는 손상 될 수 있습니다 .

이러한 이유로, 너무, create그리고 drop문 만들거나 끊어지는 개체의 이름을 스키마 자격을해야한다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.