在mysql中 FOUND_ROWS()與COUNT(*)都可以統(tǒng)計(jì)記錄,如果都一樣為什么會(huì)有兩個(gè)這樣的函數(shù)呢,下面我來(lái)介紹SELECT FOUND_ROWS()與COUNT(*)用法區(qū)別.
SELECT語(yǔ)句中經(jīng)常可能用LIMIT限制返回行數(shù),有時(shí)候可能想要知道如果沒有LIMIT會(huì)返回多少行,但又不想再執(zhí)行一次相同語(yǔ)句,那么,在SELECT查詢中包含SQL_CALC_FOUND_ROWS選項(xiàng),然后執(zhí)行FOUND_ROWS()就可以了,代碼如下:
- mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
- -> WHERE id > 100 LIMIT 10;
- mysql> SELECT FOUND_ROWS();
COUNT(*) 的稍微不同之處在于,它返回檢索行的數(shù)目,不論其是否包含 NULL值.
SELECT 從一個(gè)表中檢索,而不檢索其它的列,并且沒有 WHERE子句時(shí),COUNT(*)被優(yōu)化到最快的返回速度,例如:
mysql> SELECT COUNT(*) FROM tablename;
這個(gè)優(yōu)化僅適用于 MyISAM表, 原因是這些表類型會(huì)儲(chǔ)存一個(gè)函數(shù)返回記錄的精確數(shù)量,而且非常容易訪問。對(duì)于事務(wù)型的存儲(chǔ)引擎(InnoDB, BDB), 存儲(chǔ)一個(gè)精確行數(shù)的問題比較多,原因是可能會(huì)發(fā)生多重事物處理, 而每個(gè)都可能會(huì)對(duì)行數(shù)產(chǎn)生影響。
COUNT(DISTINCT expr,[expr...]),返回不同的非NULL值數(shù)目。
若找不到匹配的項(xiàng),則COUNT(DISTINCT)返回 0.
PHP代碼如下:
- <?php
- $sql = "select count(*) from t";
- $res = mysql_query($sql);
- $num = mysql_result($res,0);
- $sql = "select topic,detail from t limit 5";
- //***以下我就不寫了
- ?>
然而用mysql自帶函數(shù)found_rows();也可以快速求出總數(shù),PHP代碼如下:
- <?php
- $sql = "select sql_calc_found_rows topic,detail from t limit 5";
- $sql = "select found_rows()"; //Vevb.com
- $num = mysql_result($res,0);
- ?>
這種方法使用時(shí)所要注意的問題.
引用:
1 必須以select sql_calc_found_rows 開頭
2 這時(shí)found_rows() 為 沒有l(wèi)imite 時(shí)的行數(shù)
以下為一個(gè)演示,希望大家看了更加明白,PHP代碼如下:
- mysql> select count(*) from zd_sort2;
- +----------+
- | count(*) |
- +----------+
- | 20 |
- +----------+
- 1 row in set (0.14 sec)
- mysql> select sql_calc_found_rows st2_id from zd_sort2 limit 3;
- +--------+
- | st2_id |
- +--------+
- | 1 |
- | 6 |
- | 12 |
- +--------+
- 3 rows in set (0.00 sec)
- mysql> select found_rows();
- +--------------+
- | found_rows() |
- +--------------+
- | 20 |
- +--------------+
- 1 row in set (0.00 sec)
- mysql>
這兩中方法效率如何呢.
新聞熱點(diǎn)
疑難解答
圖片精選