
SQL Server를 백엔드로 사용하여 MS Access 2013에 달력 유형 응용 프로그램을 구축했습니다(달력의 각 날짜는 하위 양식입니다). 약 20개의 테이블이 선으로 연결되어 있습니다 Call AttachDSNLessTable([details here])
. 현장에서는 속도가 그럭저럭인데, VPN을 통해 접속하려고 하면 간단하게 홈 화면을 로딩하는데 6분 정도 걸린다. 그리고 다른 모든 작업을 수행하는 데는 최소 5배의 시간이 더 걸립니다.
나는 대체 옵션에 대해 무지합니다. 인터넷을 통해 데이터베이스에 액세스할 수 있도록 하는 것이 가능합니까? 그러면 속도가 빨라질까요? 아니면 VPN의 대역폭을 늘려야 할까요? 여기서 최선의 선택은 무엇입니까? 감사해요.
답변1
일반 애플리케이션 아키텍처(연결된 테이블을 통한 액세스)에는 이 목적에 결함이 있을 수 있습니다. 아마도 (대부분) 수정될 수 있지만 약간의 수정 없이는 불가능합니다.
중요한 문제는 Access가 프런트엔드인 경우 Access 자체가 SQLServer에서 처리하기 위해 전체 쿼리를 제출할 수 있는지 여부를 자체적으로 판단하고 종종 그럴 수 없다는 결론에 도달하므로 전체 쿼리를 다운로드하여 쿼리 자체를 수행하는 경우가 많다는 것입니다. 테이블. 이는 조인의 경우 특히 그렇습니다. 특히 사용 중인 각 테이블에 강력한 기본 키가 없는 경우 더욱 그렇습니다.
다음은 SQLServer 백엔드를 사용한 Access Linked Tables의 성능에 대한 MS Technet 문서입니다.https://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx
가장 관련성이 높은 비트는 다음과 같습니다.
쿼리 성능 저하의 주요 원인은 매우 큰 테이블이 포함된 쿼리에서 하나 이상의 테이블에 있는 모든 데이터를 클라이언트에 다운로드해야 하는 경우입니다. 이는 조인이나 조건이 결과 집합을 소수의 레코드로 제한하는 것처럼 보이는 경우에도 발생할 수 있습니다. 이는 때때로 Office Access 데이터베이스 엔진이 전체 쿼리를 SQL Server에 제출할 수 없다고 판단하기 때문에 발생합니다. 대신, 테이블의 모든 행을 요청하는 쿼리를 포함하여 여러 쿼리를 제출한 다음 클라이언트에서 데이터를 결합하거나 필터링합니다. 기준에 로컬 처리가 필요한 경우 단일 테이블에서 선택한 행만 반환해야 하는 쿼리라도 테이블의 모든 행이 반환되어야 할 수 있습니다.
- JET/ODBC 진단 유틸리티를 사용하여 모든 작업이 수행되는 위치를 확인합니다.
- 가능한 경우 액세스 시 스냅샷 RecordSet을 사용합니다.
- 뷰 및 저장 프로시저/함수를 사용하여 쿼리 논리를 SQLServer에 푸시합니다.
- SQLServer에서 견고한 키와 인덱스를 설정하고 필요에 따라 인덱스 조각 모음이 수행되는지 확인하십시오.
- Access에서 일반적으로 사용되는 데이터를 캐싱합니다.
위의 링크에는 귀하와 같은 위치에 있는 사람을 위한 훌륭한 조언과 기술적인 세부 정보가 많이 있습니다. 행운을 빌어요!