문제

따라서 타운십 목록이 포함된 자동 완성 드롭다운이 있습니다.처음에는 데이터베이스에 20개 정도의 정보가 있었습니다...하지만 최근에 우리 데이터 중 일부가 다른 카운티에 있다는 사실을 발견했습니다.심지어 다른 주에서도요.그래서 그에 대한 대답은 미국의 모든 도시에 대한 데이터베이스 중 하나를 구입하는 것이었습니다(예, 저도 알고 있습니다. 지오코딩이 답이지만 시간 제약으로 인해 해당 기능을 사용할 시간이 있을 때까지 이 작업을 수행하고 있습니다).

그래서 마을이 20~25개 있었을 때 자동 완성 기능은 훌륭하게 작동했습니다...이제 80,000명이 있으므로 쉽지 않습니다.

입력할 때 가장 좋은 방법은 이 상태를 기본값으로 설정하는 것입니다. 그러면 훨씬 더 적은 양이 될 것입니다.기본적으로 NJ로 설정된 페이지에 주 선택기를 추가하고 필요한 경우 다른 주를 선택할 수 있습니다. 이렇게 하면 목록이 < 1000으로 좁혀집니다.하지만 나에게도 같은 문제가 있을 수 있습니까?데이터가 많은 경우 자동 완성 문제를 해결하는 방법을 아는 사람이 있나요?

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

도움이 되었습니까?

해결책

1 자만 입력 한 후 자동 완성하려고합니까? 2 명 이상까지 기다릴 수도 있습니다 ...?

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

다른 팁

응용 프로그램이 반환되는 데이터의 양에 대해 질식 한 다음 브라우저에서 렌더링하려고 시도합니다.

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

나는 당신의 서비스 결과를 100 가지 결과로 제한 할 것입니다. 사용자는 그 방법보다 더 이상 보지 않을 것입니다.

또한 2 또는 3자가 입력 한 후에는 서비스에서 데이터를 검색하면 쿼리의 범위가 더욱 줄어 듭니다.

행운을 빕니다!

어리석은 질문이지만 ... 마을 이름 열에 색인이 있는지 확인 했습니까? 나는 80k 이름이 당신의 데이터베이스를 강조해야한다고 생각하지 않을 것입니다 ...

나는 당신이 올바른 길을 가고 있다고 생각합니다. 일련의 계단식 입력, 주 -> 카운티 -> 타운십을 사용하여 각각 후속 한 사람은 이전의 가치에 따라 잠재적 인구를 잡습니다. 각 입력은 가짜 입력을 피하기 위해 잠재적 인 모집단에 대해 검증됩니다. 매번 데이터베이스로 돌아가는 대신 중간 결과를 캐싱하고 자동 완성에 대한 쿼리를 제안합니다.

기본 SQL을 제어할 수 있는 경우 where 절에 여러 "OR like" 행이 있는 하나의 쿼리 대신 여러 "UNION" 쿼리를 시도할 수 있습니다.

확인해 보세요 이 기사 SQL 최적화에 대해

나는 단지 SQL 쿼리를 상단 절으로 제한합니다. 나는 또한 다음과 같은 대신 "보다 적은"을 사용하는 것을 좋아합니다.

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

그 "CE"는 "Cedar Grove"와 "Cedar Knolls"뿐만 아니라 "Chatham"& "Cherry Hill"을 줄 것입니다.

LINQ에서 :

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top