2009-05-12 5 views
0

백만 건의 레코드가있는 SQL Server 2005 데이터베이스에 미국 도시/주 목록 테이블이 있습니다. 내 웹 응용 프로그램 페이지에 AJAX 자동 완성 기능을 사용하는 위치 텍스트 상자가 있습니다. 사용자가 3자를 입력 할 때 전체 도시/주를 표시해야합니다. 예를 들어 : 입력 BOS .. 출력 : 보스턴, 현재 AJAX 자동 완성 성능 향상

MA

, 성능 현명,이 기능은 매우 느립니다. 어떻게 개선 할 수 있습니까?

읽어 주셔서 감사합니다.

답변

2

데이터베이스의 색인을 확인 했습니까? 쿼리의 형식이 올바르게 지정되어 있고 테이블에 적절한 인덱스가있는 경우 500 만 개의 행 데이터베이스를 쿼리하고 결과를 1 초 이내에 얻을 수 있습니다. 인덱스에 컬럼 상태가 추가 된 도시에 대한 인덱스가 있는지 확인하는 것이 좋습니다. 이렇게하면 도시별로 쿼리 할 때 인덱스에서 도시와 주를 모두 반환합니다.

SQL Management Studio에서 쿼리를 실행하고 ctrl-m을 누르면 쿼리의 실행 계획을 볼 수 있습니다. 테이블 스캔이나 인덱스 스캔과 같은 것을 발견하면 테이블에 잘못된 인덱스가 있습니다. 결과에 인덱스 탐색이 있는지 확인하려는 경우 쿼리가 데이터베이스의 적절한 페이지를 통해 데이터를 찾을 수 있습니다.

희망이 도움이됩니다.

0

제 생각에 문제는 데이터베이스 자체가 아니라 인덱스 문제를 확인해야하지만 데이터베이스에서 정보를 검색하는 데 걸리는 시간입니다. 적절한 객체 등을 찾아서 브라우저에 보냅니다. 이 경우 실제 작업이 없으면 많은 옵션이 없습니다.

  1. 자주 액세스하는 정보는 웹 서버에서 캐시 할 수 있습니다. 자주 액세스하는 도시가 많다는 것을 알고 있다면, 사용자가 찾고있는 것이 시스템에없는 경우 데이터베이스를 미리 저장하고 데이터베이스를 확인할 수 있습니다. 사용자가 뭔가를 입력하고 목록에서 찾을 때 정보를 저장하기 위해 prefix trees을 사용합니다.

  2. 사용자가 입력을 시작하자 마자 데이터베이스에서 정보를 가져 와서 사용자로부터 추가 정보를 얻은 후에 전체 결과 세트를 페어링 할 수 있습니다. 이것은 요청간에 메모리에 정보를 저장해야하기 때문에 (사용자가 "B"를 입력하면 검색을 시작하고 세션에 저장합니다.) 사용자가 "BOS"를 입력하면 초기 쿼리의 결과 집합은 일시적으로 메모리에 저장되며 최종 요청과 일치하는 하위 집합을 반복하여 가져올 수 있습니다.

-1

를 사용하여 부모의 자녀는

+0

죄송합니다 ... 확실히 그것을 얻을 .... 당신이 그것을 자세히 설명해 수 didnt한다 드롭 다운? –