2009-10-16 4 views
0

SQL Server보기를 MS Access 연결 테이블로 연결하면 고유 한 식별자를 묻는 메시지가 나타납니다. 최근 시도에서 여러 차례 식별자가 정의되지 않았다는 사실은 연결된 테이블이 훨씬 더 빨리 열리는 효과가 있다는 것을 알았습니다 (스톱워치는 필요하지 않습니다. 실제로 볼 수 있습니다).SQL Server보기를 Access db : 성능 질문에 연결

전문가에게 이에 대한 설명이 있는지, 규칙은 무엇입니까? 첨부 된보기의 기본 키를 정의할지 정의하지 않습니까?

내 컴퓨터, 동일한 Access 2007 db, 동일한보기, 동일한 드라이버 (SQL Server 10), 동일한 SQL Server 2008 서버에서 비교할 수 있습니다.
제 경우 SQL 뷰인 링크 된 테이블을 업데이트 할 필요가 없습니다.

+0

이것은 실제 성능 속임수입니다! –

답변

1

액세스는 업데이트를 수행하기 위해 고유 한 식별자 만 필요합니다. 고유 식별자를 정의하지 않았다면 (그리고 그렇게 할 필요가 없다면) 고유 한 식별자를 추적하지 않기 때문에 더 빠릅니다. 그 차이가 왜 그렇게 두드러진지는 모르겠습니다. 느린 버전에서 선택했던 고유 식별자는 얼마나 넓습니까 (열 및 바이트)입니까?

+0

ID는 10 자처럼 작고 데이터는 약 15000 개의 레코드로 설정됩니다. 서버는 강력하고 사용량이 많지 않습니다. 다음 번에는 클라이언트 컴퓨터에서 프로세서 사용량을 살펴볼 것입니다. –

+0

성능 차이는 데이터가 읽기 전용이라는 것을 알고 있기 때문에 더 많은 성능 잠금 전략을 사용할 수있는 것과 관련이있을 수 있습니다. – JohnFx

1

테스트 시스템에서 결과를 복제했으며 프로파일 러를 실행하여 알아낼 수 있는지도 확인했습니다. 뷰를 뷰에 두 번 연결했는데, 한 번은 고유 한 식별자를 지정하고 하나는 지정하지 않았습니다. 당신과 같은 결과.

프로필이 너무 밝지 않았습니다. UNindexed 뷰의 경우 표준 SELECT columnList FROM 뷰였습니다. 인덱싱 된 뷰의 경우 결과에 모든 열이 분명하게 표시 되더라도 키 열만 지정되었습니다.

내가 생각할 수있는 유일한 점은 Access에서 고유 키를 지정하므로 Access에서 서버의 키 열을 로컬 인덱스에 연결하기 위해 데이터 세트를 메모리로 완전히 가져와야한다는 것입니다. 로컬 색인이 없으면 해당 연관이 발생할 필요가 없습니다.

+0

나는 Jet가 그 인덱스에 관한 메타 데이터를 끌어 당길 것이고 그다지 그럴 것이라고 기대하지는 않는다. 확실히 전체 표를 가져올 필요가 없으며 전체 PK 색인조차도 없을 것입니다. –

+0

아마도; 저를 혼란스럽게 만들었지 만, Access에서 연결된 테이블의 데이터가 표시 되더라도 인덱싱 된 버전에서 실행 된 쿼리는 인덱싱 된 열만 선택한다는 것입니다. 나머지 데이터는 어디에서 왔습니까? –

+0

샘을 찾은 것을 기쁘게 생각합니다. 여기에서 발견 한 사실은 테이블을 수동으로 열 때 (몇 번) 눈에 띄는 지연 때문입니다. 오픈시 Access에서 로컬 고유 인덱스를 작성하고 있는지 궁금합니다. –