ODBC 데이터 원본을 사용할 때 Microsoft Access를 최적화하는 방법

고급: 전문 코딩, 상호 운용성 및 다중 사용자 기술이 필요합니다.

이 문서는 Microsoft Access 데이터베이스(.mdb 또는 .accdb)에만 적용됩니다.

요약

이 문서에서는 ODBC 데이터 원본의 데이터에 액세스할 때 성능을 향상시키기 위한 몇 가지 팁을 설명합니다.

추가 정보

다음 팁을 사용하여 ODBC 데이터 원본의 성능을 향상시킵니다.

  • 서버에서 요청하는 데이터의 양을 제한합니다. 필요한 것보다 더 많은 데이터를 요청하지 마세요. 쿼리를 사용하여 필요한 필드 및 행만 선택합니다.

  • 필요한 기능만 사용합니다. 스냅샷은 다이나셋보다 덜 강력하며 업데이트할 수 없습니다. 그러나 특히 메모 또는 OLE 개체 필드가 없는 작은 레코드 집합의 경우 스냅샷이 더 빠를 수 있습니다.

  • 연결된(연결된) 테이블을 만들어 서버 데이터에 액세스합니다. "직접" 서버 액세스를 방지합니다(즉, 원격 데이터베이스를 열고 쿼리를 실행하지 마세요). 대신 연결된 테이블을 만들거나 통과 쿼리를 만듭니다.

  • 목록 상자와 콤보 상자를 현명하게 디자인합니다. 폼에서 각 목록 상자, 콤보 상자, 하위 폼 및 합계를 포함하는 컨트롤에는 별도의 쿼리가 필요합니다. 로컬 데이터에 대해 성능이 적절할 수 있습니다. 그러나 원격 데이터에 대해 각 쿼리를 서버로 보내야 하고 양식을 열기 전에 응답을 반환해야 하므로 폼을 열 때 긴 지연이 발생할 수 있습니다.

  • 큰 콤보 상자를 사용하지 마십시오. 로컬 테이블에 따라 수백 또는 수천 개의 선택 항목이 포함된 콤보 상자를 포함하면 특히 로컬 테이블에 적절한 인덱스를 정의하는 경우 적절한 응답 시간이 발생할 수 있습니다. 그러나 원격 테이블에 대해 이러한 콤보 상자는 목록을 채우기 위해 데이터를 가져올 때 서버 및 네트워크 리소스를 드레이닝하기 때문에 성능이 저하됩니다. 원격 데이터로 작업할 때 콤보 상자로 반환되는 행 수를 제한하는 것이 가장 좋습니다. 데이터를 더 작은 콤보 상자(위의 팁을 염두에 두고)로 분할할 수도 있습니다.

  • 더 작은 레코드 집합에서만 Find 명령을 사용합니다. Microsoft Jet 데이터베이스 엔진은 거의 모든 크기의 로컬 레코드 집합과 적절한 크기의 원격 레코드 집합에 대해 잘 작동하도록 Find 명령을 최적화합니다. 그러나 대규모 원격 레코드 집합(수천 개 이상의 레코드)이 있는 경우 대신 필터 또는 쿼리를 만들고 서버에서 처리할 수 있는 제한을 사용해야 합니다.

  • 처리를 위해 쿼리가 서버로 전송되는지 확인합니다. 원격 데이터에 대한 쿼리 성능에서 가장 중요한 요소는 서버가 가능한 한 많은 쿼리를 실행하도록 하는 것입니다. Microsoft Jet 데이터베이스 엔진은 전체 쿼리를 서버로 보내려고 시도하지만 서버 또는 특정 서버에서 일반적으로 지원되지 않는 쿼리 절 및 식을 로컬로 평가합니다. 일반적으로 서버에서 지원되지 않는 기능에는 다음이 포함됩니다.

  • 단일 SQL 문으로 표현할 수 없는 작업입니다. 이 상황은 쿼리를 다른 쿼리에 대한 입력으로 사용하거나 쿼리의 FROM 절에 Totals 쿼리 또는 DISTINCT 쿼리가 포함된 경우에 발생할 수 있습니다. 종종 쿼리를 다시 정렬하여 다른 모든 작업 후에 합계를 계산할 수 있습니다.

    • 여러 수준의 그룹화 및 합계가 있는 크로스탭 쿼리, TOP 쿼리 및 보고서와 같은 Microsoft Jet 데이터베이스 엔진별 SQL 확장 작업입니다. 간단한 크로스탭 쿼리를 서버로 보낼 수 있습니다.
    • Microsoft Access 관련 연산자 또는 함수를 포함하는 식입니다. Microsoft Access 재무 기능 및 통계 집계에는 서버와 동등한 항목이 없습니다.
    • 원격 열을 인수로 사용하는 사용자 정의 Visual Basic for Application 함수입니다. 이러한 함수는 서버에 없지만 원격 열 데이터를 처리해야 합니다. 그러나 사용자 정의 함수가 단일 값을 반환하고 원격 열을 참조하지 않는 경우 함수는 로컬로 평가되고 해당 값은 처리를 위해 서버로 전송됩니다.
    • 연산자 또는 UNION 쿼리 출력에서 텍스트 및 숫자 데이터 형식을 혼합합니다. 대부분의 서버는 Microsoft Access의 데이터 형식 관용성이 부족합니다. 따라서 적절한 경우 명시적 변환 함수를 사용합니다.
    • 로컬 테이블과 원격 테이블 간 또는 다른 ODBC 데이터 원본의 원격 테이블 간에 서로 다른 유형의 조인입니다. 조인 열이 인덱싱되는 작은 로컬 테이블과 큰 원격 테이블 간의 조인으로 인해 원격 인덱스 조인이 발생할 수 있습니다. 원격 인덱스 조인에서 로컬 테이블의 각 행에 대한 하나의 쿼리가 서버로 전송되고 조인 행만 반환됩니다.
    • 원격으로 사용할 수 없는 식 또는 서버에서 평가할 수 없으므로 원격으로 보낼 수 없는 식입니다. 원격 불가능 출력 식(SELECT 절에 있는 식)은 Totals 쿼리, DISTINCT 쿼리 또는 UNION 쿼리에서 발생하지 않는 한 쿼리의 로컬 평가를 강제하지 않습니다. 다른 절(WHERE, ORDER BY, GROUP BY, HAVING 등)의 원격이 불가능한 식은 쿼리의 일부 이상을 로컬로 평가하도록 합니다.
  • 서버는 지원되는 기능의 일부 영역에서 다릅니다. 원격 테이블을 연결하면 Microsoft Jet 데이터베이스 엔진이 ODBC 드라이버에 해당 기능을 쿼리합니다. 드라이버와 서버에서 필요한 기능을 지원하는 경우 Microsoft Jet 데이터베이스 엔진은 처리를 위해 작업을 서버로 보냅니다. 그렇지 않은 경우 Microsoft Jet 데이터베이스 엔진은 로컬로 작업을 수행합니다. 지원 영역이 다른 영역에는 다음이 포함됩니다(제한되지는 않음).

    • 외부 조인. 많은 내부 조인이 단일 외부 조인을 동반할 수 있지만 Microsoft Jet 데이터베이스 엔진은 여러 외부 조인을 서버에 보내지 않습니다.
    • 숫자, 문자열 및 날짜/시간 함수(예: Log(), Mid$(), DatePart() 등
    • CInt(), CStr(), CVDate() 등과 같은 변환 함수