我有一个通用的软件练习问题,也许版主可以更好地表述我的标题。
我正在为具有一堆过滤器的“管理用户”页面加载分页结果列表。
在我的系统中,有 3000 个用户,我想每页显示 25 个,底部有一个分页控件。没问题。这里的问题...
我想在页面顶部显示,我的条件有 2300 个匹配项,所以我正在做的是两次运行相同的 SQL 查询——一次限制为 25 条记录以构建到对象中(用于分页),然后再次获得不受约束的总数。
这似乎表现不佳。有没有一种无需运行两个 SQL 查询的首选方法?
我有一个通用的软件练习问题,也许版主可以更好地表述我的标题。
我正在为具有一堆过滤器的“管理用户”页面加载分页结果列表。
在我的系统中,有 3000 个用户,我想每页显示 25 个,底部有一个分页控件。没问题。这里的问题...
我想在页面顶部显示,我的条件有 2300 个匹配项,所以我正在做的是两次运行相同的 SQL 查询——一次限制为 25 条记录以构建到对象中(用于分页),然后再次获得不受约束的总数。
这似乎表现不佳。有没有一种无需运行两个 SQL 查询的首选方法?
我解决了一个类似的问题并采用了两种查询方法:第一个查询检索当前数据页(即 25 行),而另一个用于检索总计数。
从您的问题来看,您似乎正在第二个查询中检索整个数据集。正如其他人所说,您最好只检索行数。
仅在第二个查询中获取行数应该会加快速度,但是如果您想避免每次加载一些数据时都运行它,您可以在页面最初加载时只运行一次,将结果存储在会话中或视图状态。这当然意味着如果行数发生变化,计数可能会过时,因此在这种情况下,您需要根据性能评估准确性的优点。
Don't run the same query but a Count(*)
one. For example:
Select top 25 Name, Country, SomethingElse from SomeTable where Name like @name
Select Count(*) from SomeTable where Name like @name
This is easily achieved when using an ORM like NHibernate or Entity Framework. For plain-old sql, you'll need to create both queries.
Hope it helps.