對於我的應用程序,我的大部分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