我在我的sql server 2005数据库中有一个美国城市/州列表,它有一百万条记录。我的Web应用程序页面具有使用AJAX自动完成功能的位置文本框。当用户输入3个字符时,我需要显示完整的城市/州。 例如: 输入bos .. 输出:波士顿,MA
目前,性能方面,此功能非常慢。我该如何改进呢?
感谢阅读。
答案 0 :(得分:2)
您是否已检入数据库中的索引?如果您的查询格式正确,并且您的表上有正确的索引,则可以查询500万行数据库并在不到一秒的时间内获得结果。我建议你看看你是否有一个关于City的索引,并在索引上添加了列State。这样,当您按城市查询时,它将从索引返回城市和州。
如果在sql management studio中运行查询并按ctrl-m,则可以在查询中看到执行计划。如果您看到表扫描或索引扫描等内容,那么表上的索引就会错误。您希望确保结果具有索引查找功能,这意味着您的查询将通过数据库中的正确页面来查找数据。
希望这有帮助。
答案 1 :(得分:0)
我的猜测是你遇到的问题不是数据库本身(虽然你应该检查索引问题),但是从数据库中检索信息所花费的时间,把它放在适当的对象等,并将其发送到浏览器。如果是这种情况,没有一些实际工作就没有很多选择。
您可以在Web服务器上缓存频繁访问的信息。如果您知道有很多城市经常被访问,您可以预先存储它们,然后检查数据库是否用户正在寻找的不在系统中。我们使用prefix trees来存储用户输入内容时的信息,我们需要在列表中找到它。
您可以在用户开始输入后立即从数据库中提取信息,然后在从用户获取更多信息后将完整的结果集配对。这有点棘手,因为您必须在请求之间将信息存储在内存中(因此,如果用户键入“B”,则开始检索并将其存储在会话中。当用户输入“BOS”时初始查询的结果集暂时在内存中,您可以遍历并拉出与最终请求匹配的子集。
答案 2 :(得分:-1)
使用父子下拉列表