2008-10-07 3 views
2

그래서 마을 목록과 함께 자동 완성 드롭 다운이 있습니다. 처음에는 데이터베이스에 20 개 정도의 데이터가 있었지만 ... 최근에 우리 데이터의 일부는 다른 카운티 ... 심지어 다른 주에 있다는 것을 알았습니다. 그래서, 그 해답은 미국의 모든 도시에있는 데이터베이스 중 하나를 사는 것입니다 (예, 알고 있습니다. 지오 코딩이 답이지만 시간 제약으로 인해 해당 기능을위한 시간이 있기까지 작업을 수행하고 있습니다).자동 완성 드롭 다운 - 너무 많은 데이터, 시간 초과.

그래서 우리는 20-25 개의 도시가 있었을 때 자동 완성 기능이 훌륭하게 작동했습니다 ... 이제는 80,000 가지가 나오기 때문에 쉽지 않습니다.

내가 입력 할 때이 작업을 수행하는 가장 좋은 방법은이 상태로 기본 설정되어 있다고 생각합니다. 상태 선택기를 NJ 기본값으로 설정된 페이지에 추가 한 다음 필요한 경우 다른 상태를 선택할 수 있습니다. 그러면 목록이 < 1000으로 좁혀집니다. 그러나 동일한 문제가있을 수 있습니까? 누구든지 많은 데이터가있는 자동 완성을위한 해결 방법을 알고 있습니까?

내 웹 서비스 코드를 게시해야합니까?

답변

10

한글자가 입력 된 후 자동 완성을 시도 하시겠습니까? 어쩌면 2 개 이상 기다릴 지 ...?

또한 상위 10 개 행을 반환 할 수 있습니까?

+0

지금과 테스트 변경, 하나를해야합니까. –

1

아마도 어리석은 질문 일지 모르지만 마을 이름 열에 색인이 있는지 확인 했습니까? 80K 이름이 데이터베이스에 스트레스를 주어야한다고 생각하지 않습니다 ...

+0

당신이 말했듯이, 80 억 개의 이름이 긴장해서는 안된다고 인덱스 숄치를 추가 할 생각은 없습니다 ...하지만 상상할 수는 없습니다. –

2

응용 프로그램과 같은 사운드가 반환되는 데이터 양에 질식을 유발하고 브라우저에서 렌더링하려고 시도했습니다.

데이터베이스에 적절한 인덱스가 있다고 가정하고 거기에 성능 문제가없는 것으로 가정합니다.

귀하의 서비스 결과를 100 개 이상의 결과로 제한합니다. 사용자는 그 이상을 전혀 보지 않을 것입니다.

2 ~ 3자를 입력하면 서비스의 데이터 만 검색하므로 쿼리 범위가 더 줄어 듭니다.

행운을 빌어 요!

1

나는 당신이 올바른 길에 있다고 생각합니다. 계단식 입력 인 State -> County -> Township을 사용하십시오. 계단식 입력은 앞의 값에 따라 잠재 인구를 얻습니다. 각 입력은 가짜 입력을 피하기 위해 잠재 인구에 대해 유효성을 검사합니다. 중간 결과를 캐싱하고 매번 데이터베이스로 돌아 가지 않고 자동 완성을 위해 쿼리하는 것이 좋습니다.

1

기본 SQL을 제어 할 수있는 경우 where 절에 여러 "OR like"행이있는 쿼리 하나 대신 여러 UNION 쿼리를 사용해보십시오.

SQL 최적화에 대해 this article을 확인하십시오.

0

나는 단지 TOP 절로 SQL 쿼리를 제한합니다. 나는 또한 사용하여 같은 대신 등을 "보다": "CE는"당신에게 "시더 그 로브 '와'삼나무 놀스"뿐만 아니라 "채텀"& "체리 힐"을 줄 것이다

select top 10 name from cities where @partialname < name order by name; 

것을 항상 이렇게 열세.LINQ에서

:

var q = (from c in db.Cities 
     where partialname < c.Name 
     orderby c.Name 
     select c.Name).Take(10); 
관련 문제