0

我有一个通用的软件练习问题,也许版主可以更好地表述我的标​​题。

我正在为具有一堆过滤器的“管理用户”页面加载分页结果列表。

在我的系统中,有 3000 个用户,我想每页显示 25 个,底部有一个分页控件。没问题。这里的问题...

我想在页面顶部显示,我的条件有 2300 个匹配项,所以我正在做的是两次运行相同的 SQL 查询——一次限制为 25 条记录以构建到对象中(用于分页),然后再次获得不受约束的总数。

这似乎表现不佳。有没有一种无需运行两个 SQL 查询的首选方法?

4

2 回答 2

1

我解决了一个类似的问题并采用了两种查询方法:第一个查询检索当前数据页(即 25 行),而另一个用于检索总计数。

从您的问题来看,您似乎正在第二个查询中检索整个数据集。正如其他人所说,您最好只检索行数。

仅在第二个查询中获取行数应该会加快速度,但是如果您想避免每次加载一些数据时都运行它,您可以在页面最初加载时只运行一次,将结果存储在会话中或视图状态。这当然意味着如果行数发生变化,计数可能会过时,因此在这种情况下,您需要根据性能评估准确性的优点。

于 2012-11-10T05:15:36.710 回答
0

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.

于 2012-11-10T05:56:02.677 回答