Stack Overflowers:
我在我公司的网站(基于.NET 2.0)上有一个搜索功能,允许您使用多达9个不同的字段缩小产品目录。现在,在您在前端进行选择后,我正在构建一个动态查询并点击数据库(SQL Server)以获取项目数字的结果列表。
我希望每次都能远离数据库并在内存中完成所有这些操作以获得更快的结果。基本上是3500 - 4500行“表”,包含10列:项目编号(可以是主键)和9个属性字段(具有许多行的重复值)。 9列之间可以有任意数量的不同搜索来获取您想要的项目:
根据我的研究,.Select()函数似乎是执行搜索的最慢方式,但它对我来说是最快捷,最简单的方法来执行缩小搜索以获取项目编号列表:
MyDataSet.Select("Column B = 'foo' AND Column E = 'bar' AND Column I = 'me'")
在我的具体情况下,您建议我使用哪种方法作为替代方案,具有相同的缩小功能和更好的性能,而不是为datatable.select()方法解决?
答案 0 :(得分:3)
您最好的选择是让您的数据库执行最擅长的操作:查询和过滤数据。
缓存DataTables(尤其是具有3500-4500行的DataTables)对Web应用程序来说是个坏主意。在DataTable上调用Select()不会减少DataTable中的行数 - 它会返回一个新的行集合(从原始文件中复制),这意味着您仍然可以将原始的4000行放在缓存中。最好在缓存中什么都没有,只需在用户请求时获取所需的行。
DataTables(和DataSet)最适合胖客户端(通常是Windows应用程序),它们需要在处于断开连接状态时使用数据库数据的内存中副本。
答案 1 :(得分:2)
数据表不是为查询而优化的,我不建议沿着这条路走下去,除非你确实有一个记录的性能问题,你肯定会通过这样做来改进。
如果您的动态查询速度很慢,可能是因为您没有在数据库中正确索引表。数据库旨在能够以最佳方式查询您的数据,因此我的预感是,在数据库方面的一些工作应该可以让您到达目的地。
如果您确实需要查询ADO.Net数据表,请务必仔细阅读Scaling ADO.Net DataTables。它讨论了你可以做些什么来加快它们的性能,并给你一些基准,以便你可以看到差异。