2009-11-09 2 views
0

일부 기존 액세스 < 2007 "데이터베이스"를 다루고 있습니다. 모든 테이블은 SQL Server 2008에 연결된 테이블입니다. ODBC 링크가 설정된 동안 테이블 구조는 DSN 문자열과 함께 mdb 파일에 복사됩니다. Msysobjects에서 볼 수있는 것입니다.Jet Engine의 쿼리 최적화는 통계를 기반으로하지만 링크 된 테이블을 사용하여 새로 고칩니다.

쿼리를 사용하면 Jet Engine이 Jet Engine 최적화와 관련하여 SQL Server에서 데이터를 검색하도록 할 수 있습니다. 따라서 새로운 인덱스 파 예제를 추가하는 것처럼 SQL Server가 변경 될 때마다 ODBC 링크를 새로 고치는 것이 중요합니다.

일부 테이블이 커지면 제트 최적화 프로그램에서 새로 고침 된 통계가 필요하지만 프로세스는 어떤 프로세스를 수행해야합니까? 그것이 수리입니까 & ODBC 링크를 압축하거나 새로 고치십니까? 프로그래밍 방식으로이 작업을 수행 할 수 있습니까?

평화

아이스

답변

2

JET는 좋은 최적화 의사 결정을하는 데 필요한 가장 중요한 것은 작업을 수정할 수 있습니다 확신 다른 경로에 대한 액세스 테이블을 다시 링크 일부 코드가 올바른 입니다 테이블에 인덱스. 디자인 모드에서 링크 된 테이블 (ODBC)을 열고 인덱스 아이콘을 클릭하면 JET에서 볼 수있는 인덱스를 확인할 수 있습니다. 테이블이 읽기 전용이라고 경고합니다.

쿼리가 실행될 때 JET가 최적화 메타 데이터를 작성하기를 기다리는 것보다 소스 테이블에 인덱스를 만드는 것이 더 효과적 일 수 있습니다.

+0

Jet은 쿼리 실행? 이러한 정보는 어디에 저장됩니까? 읽기 전용 모드로 mdb를 열면 (힌트 : ODBC로 연결된 테이블의 데이터는 쓰기 가능합니다.) mdb가 커지지 않습니다. – Ice

+0

Jet는 쿼리를 실행하는 동안 메타 데이터를 저장하고 .mdb 파일에 저장합니다. Jet는 ODBC 연결보다 로컬 테이블에 대한 완전한 정보를 컴파일 할 수 있습니다. JET가 쿼리 컴파일을 원격 데이터베이스에 넘기로 결정하면 최적화 정보가 거의 생성되지 않을 수 있습니다. – heferav

1

그것은 ODBC 데이터 소스 테이블 통계 및 메타 데이터의 특정 유형의 제트 관련가는 것을 깨닫게하는 것이 중요합니다. 일반적으로, 나는 인덱스가 SQL 문장으로 무엇을 할 것인가를 결정하는 Jet의 관점에서 정말로 중요한 부분이라고 생각한다 - 인덱스가 있고 다른 끝에있는 서버를 이해한다면 그것은 모든 것을 전달할 것이다. 서버 데이터베이스가 이해할 수없는 표현식을 어리석게 선택하거나 정렬하지 않으면 처리 할 서버를 지정해야합니다. 이 경우 Jet는 서버에서 처리 할 수있는 SQL 문의 부분 (예 : 조인 및 리터럴에 대한 조건)을 보내고 표현식과 함께 반환 된 결과 집합을 사용할 정도로 똑똑 할 수 있습니다.

링크 된 테이블에 관한 질문과 관련하여 불행히도 ODBC 연결된 테이블을 동적으로 업데이트 할 수있는 방법이 없습니다. 예를 들어, 테이블이나 뷰에 열을 추가하면 반환 된 테이블에 해당 테이블이 없습니다. , 링크를 새로 고치면 새 열이 나타나지만 읽기 전용 일 수 있습니다.

서버의 테이블 구조 및보기를 변경할 때 수행해야 할 유일한 작업은 관련 연결된 테이블을 간단히 삭제하고 다시 만드는 것입니다. 이렇게하기위한 프로그래밍 방식이 있다는 것을 나는 모른다. 구조가 마지막으로 업데이트 된 시점을 알려주는 테이블/뷰에 대한 메타 데이터가있는 경우 링크 된 테이블의 날짜와 비교하여 체크하고 링크가 끝난 후 백엔드가 업데이트되면 삭제하고 다시 만들 수 있습니다. 그냥 여기서 추측하고있어. 그러나 그것은 백엔드와 관련된 것이다. 각 SQL 문 다음 실행시, 컴파일

제트에 접근 할 수있는, 컴팩트 한 테이블 통계를 다시 설정해야하고, :

완성도를 위해서

, 난 그냥 제트 백 엔드에 기초를 줄 것이다 각 문은 삭제되고 쿼리 계획은 새 통계를 기반으로 다시 계산됩니다. 백 엔드를 압축하는 테이블 통계를 업데이트 할 목적으로 프런트 엔드를 압축하는 경우 중요합니다. 전에 프런트 엔드를 압축하십시오. 백 엔드 테이블 통계가 가능한 한 정확하기 때문에 대부분은 컴팩트하지 않고도 최신 상태를 유지합니다.)

+0

Thx, 심오한 설명. 나는 완전히 동의하지만 where 절에 subselect를 포함하는 select 문에 중요한 차이가 있습니다. where not exists (select * from ... 이 명령문은 SQL Server에서 매력처럼 실행되지만 jet은 각 행 하나에 대해 보냅니다. subselect-statement ... profiler로 SQL-server를 따라갈 수 있습니다. 재미는 없습니다 제트 통계는 정확히 어디에 저장됩니까? – Ice

+0

알고있는 모든 방법으로 Jet 통계에 액세스 할 수 없습니다. –

0

내가 틀렸다면 고쳐질 것이라고 확신하지만, 테이블을 다시 연결하면 통계가 업데이트되어야한다고 생각합니다. 그것은 단지 몇 테이블 경우 다음 "연결된 테이블 관리자"내장 된이 작업을 수행 할 수 있습니다. 그렇지 않다면 코드에서 코드를 자동화 한 다음 테이블 통계를 업데이트 할 때마다 해당 함수를 실행하면됩니다.

나는 당신이 ODBC 연결된 테이블

+0

기존 링크를 새로 고치는 작업은 무엇입니까? 링크 된 테이블에 저장된 모든 메타 데이터를 업데이트하지 마십시오. 링크를 삭제하고 다시 만들면 최신 메타 데이터가 보호됩니다. –

+0

정정당당 한 상태입니다. (정형 외과 신발을 신는 사람에게 말한 것입니다.) 메타 데이터의 어느 부분이 링크를 새로 고칠 때 및 링크가 삭제 될 때만 업데이트됩니까? –

관련 문제