所以,我有一个乡镇列表的自动完成下拉列表。最初我只有20左右,我们在数据库中... ...但最近,我们注意到我们的一些数据位于其他国家......甚至其他州。因此,答案就是购买美国所有城镇的数据库中的一个(是的,我知道,地理编码是答案,但由于时间限制,我们正在这样做,直到我们有时间完成该功能)。

所以,当我们有20-25个城镇时,自动完成工作一直很好......现在有80,000个并不那么容易。

当我输入时,我认为执行此操作的最佳方法是默认为此状态,然后会少得多。我将向默认为NJ的页面添加状态选择器,然后如果需要可以选择另一个状态,这会将列表缩小到<!> lt; 1000.虽然,我可能有同样的问题?有没有人知道有很多数据的自动完成工作?

我应该发布我的网络服务的代码吗?

有帮助吗?

解决方案

您是否只在输入1个字符后尝试自动填充?也许等到2个或更多......?

另外,你能直接返回前10行还是什么?

其他提示

听起来您的应用程序对返回的数据量感到窒息,然后尝试由浏览器呈现。

我假设您的数据库具有正确的索引,并且您没有性能问题。

我会将您的服务结果限制为不超过100个结果。用户不会查看任何内容。

我只会在输入2或3个字符后从服务中检索数据,这将进一步缩小查询范围。

祝你好运!

愚蠢的问题可能,但是......你检查过以确保城镇名称列上有索引吗?我不认为80K名称应该强调你的数据库...

我认为你走在正确的轨道上。使用一系列级联输入,State - <!> gt;郡 - <!> gt;每个接下来的人都根据前一个人的价值抓住潜在人口的乡镇。每个输入都将对其潜在的人群进行验证,以避免虚假输入。我建议缓存中间结果并查询它们以获取自动完成,而不是每次都返回数据库。

如果你可以控制底层SQL,你可能想尝试几个<!>“UNION <!>”;查询而不是一个带有几个<!>的查询;或者像<!>一样;其where子句中的行。

查看有关优化SQL的这篇文章

我只是用TOP子句限制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