2010-05-09 50 views
1

对于我的应用程序,我的大部分SQL查询都返回指定数量的行。我还想获得尽可能多的结果数,即如果我没有设置LIMIT,将返回多少行。获取最大可能结果集的大小

是否有一个更有效的方法来执行此操作(仅使用SQL?)而不是返回所有结果,获取结果集的大小,然后拼接集合返回前N行。

+0

你使用什么DBMS? MySQL的? – Gumbo 2010-05-09 18:01:09

+0

MySQL是可能的 - Postgres和SQLite是唯一的其他数据库,我知道使用限制... – 2010-05-09 18:07:57

回答

1

您可以使用SELECT COUNT(*),但这是不理想的大数据集。
一个更有效的解决方案是使用SQL_CALC_FOUND_ROWSFOUND_ROWS()http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

首先查询:

SELECT SQL_CALC_FOUND_ROWS id, name, etc FROM table LIMIT 10;

第二个查询:

SELECT FOUND_ROWS();

您仍然需要两个查询,但是你只运行一次主查询,节省资源。

+0

正是我在找什么 - 欢呼 – wheresrhys 2010-05-10 19:38:56

0

要获得指定数量的行,您可以使用select count(*)。那是你在找什么?

1

我还想获得尽可能多的结果,即如果我没有设置LIMIT,将返回多少行。

用途:

SELECT COUNT(*) 
    FROM YOUR_TABLE 

...来获取当前存在于YOUR_TABLE的行数。

有没有一种更有效的方式来做到这一点(只使用SQL?)不是返回所有的结果,得到的结果集的大小,然后拼接集只返回前N行。

只获取您需要的行/信息。获取一切意味着很多数据正在通过网络传播,可能根本不会被使用。在这种情况下,数据被缓存 - 这意味着它可能会过时,因为它不是来自数据库的新鲜事物。

这听起来像是分页...