对于我的应用程序,我的大部分SQL查询都返回指定数量的行。我还想获得尽可能多的结果数,即如果我没有设置LIMIT,将返回多少行。获取最大可能结果集的大小
是否有一个更有效的方法来执行此操作(仅使用SQL?)而不是返回所有结果,获取结果集的大小,然后拼接集合返回前N行。
对于我的应用程序,我的大部分SQL查询都返回指定数量的行。我还想获得尽可能多的结果数,即如果我没有设置LIMIT,将返回多少行。获取最大可能结果集的大小
是否有一个更有效的方法来执行此操作(仅使用SQL?)而不是返回所有结果,获取结果集的大小,然后拼接集合返回前N行。
您可以使用SELECT COUNT(*)
,但这是不理想的大数据集。
一个更有效的解决方案是使用SQL_CALC_FOUND_ROWS
和FOUND_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();
您仍然需要两个查询,但是你只运行一次主查询,节省资源。
正是我在找什么 - 欢呼 – wheresrhys 2010-05-10 19:38:56
要获得指定数量的行,您可以使用select count(*)。那是你在找什么?
我还想获得尽可能多的结果,即如果我没有设置LIMIT,将返回多少行。
用途:
SELECT COUNT(*)
FROM YOUR_TABLE
...来获取当前存在于YOUR_TABLE的行数。
有没有一种更有效的方式来做到这一点(只使用SQL?)不是返回所有的结果,得到的结果集的大小,然后拼接集只返回前N行。
只获取您需要的行/信息。获取一切意味着很多数据正在通过网络传播,可能根本不会被使用。在这种情况下,数据被缓存 - 这意味着它可能会过时,因为它不是来自数据库的新鲜事物。
这听起来像是分页...
你使用什么DBMS? MySQL的? – Gumbo 2010-05-09 18:01:09
MySQL是可能的 - Postgres和SQLite是唯一的其他数据库,我知道使用限制... – 2010-05-09 18:07:57