2011-10-14 32 views
4

这是我的第一个问题,虽然我一直潜伏了很长一段时间。我想知道最好的方法是在产品数据库中搜索大约350,000条记录。我正在重写一个当前正在搜索如下内容的应用程序:只要您在搜索文本框上单击Enter,就会查询数据库并显示10条记录。然后,当您使用ListView控件中的向上和向下箭头浏览记录时,它将根据您去往的方向查询下10条记录。看看其他问题,我找不到任何具体解决VS2010中使用ListView的问题。我已经对ListView的虚拟模式进行了一些研究,但是由于它一次只显示10条记录,所以普通的ListView应该没问题。 我目前能够显示10条记录,但我试图弄清楚如何跟踪和查询一条记录。使用.NET listview有效地搜索数十万条记录

有没有人有这方面的经验或可能有一些建议?谢谢!

+0

你用什么数据库? – Icarus

+0

该公司目前正在使用SQL Server 2005。 –

回答

3

让我开始说,我几年前没有做过很多前端编码,但在.NET中确实存在一些缓存选项。处理350K行,我不知道这是否真的可行。

另一种选择是使用用户或连接标识将缓存结果存储在数据库中的一个或多个表中,以便跟踪要使用的缓存结果。

第三种方法是在前端简单地存储排序列在列表中的最小值和最大值。然后,您可以将这些传递给下一个/先前的调用,并且数据库每次都可以查找相应的页面。这样做的一个缺点是,当人们更新数据库时,可能没有一致的结果。例如,我可以点击“下一个”,有人可能会添加一行落入前一页的范围,现在当我点击“上一页”时,我看到该行与九个原始行而不是十个行我之前刚刚看过。

现在为了我自己对前端搜索的强烈意见。您应该永不允许用户通过350K行的页面。无论如何,人类的思想无法处理那么多事情。你真的认为用户会点击35,000次“下一个”按钮吗?或者要求他们输入搜索条件,将行数限制在某个合理的数字或者不管他们是什么搜索条件,只允许他们去,例如,100页。如果他们尝试去第101页,那么给他们一个消息,告诉他们限制他们的搜索。这样做的好处是您可以轻松使用任何缓存方法,并且结果足够有限,您不会遇到那里的资源问题。

我希望这对你有帮助。如果您有任何特定于上述任何模式的问题,那么您可以将它们发布到此处或为此创建一个新问题。

1

汤姆,感谢您的快速反应和详细的答案。我花了一些时间在周末尝试不同的方式来实现这一点,你的洞察力非常有帮助。 我决定做的是在表单加载,加载匹配搜索的前10条记录。当然,如果他们没有在所有的滚动(他们选择了最后一条记录在页面上,按下的键是向下箭头),我问再次使用类似SQL这个数据库:

SELECT TOP 1 Item, Description, BuyPrice, SellPrice FROM Product WHERE ID NOT IN (SELECT TOP <# of records received so far +1> ID FROM PRODUCT WHERE Description like '<search text>%' ORDER BY Description ASC) AND Description like '<search text>%' ORDER BY Description ASC

我知道这并不是最有效的方法,但它的工作效果令人惊讶,足以使速度足够快,可用于生产。我想你也可以选择接下来的10条记录,但如果需要的话,我会尝试。再次感谢您的帮助。

相关问题