2010-05-09 49 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行。

只獲取您需要的行/信息。獲取一切意味着很多數據正在通過網絡傳播,可能根本不會被使用。在這種情況下,數據被緩存 - 這意味着它可能會過時,因爲它不是來自數據庫的新鮮事物。

這聽起來像是分頁...