mysql SELECT FOUND_ROWS()與COUNT(*)用法區別

來源:互聯網
上載者:User

SELECT語句中經常可能用LIMIT限制返回行數。有時候可能想要知道如果沒有LIMIT會返回多少行,但又不想再執行一次相同語句。那麼,在SELECT查詢中包含SQL_CALC_FOUND_ROWS選項,然後執行FOUND_ROWS()就可以了:

 代碼如下 複製代碼

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name

      -> WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();

COUNT(*) 的稍微不同之處在於,它返回檢索行的數目, 不論其是否包含 NULL值。

SELECT 從一個表中檢索,而不檢索其它的列,並且沒有 WHERE子句時, COUNT(*)被最佳化到最快的返回速度。例如:

 代碼如下 複製代碼

mysql> SELECT COUNT(*) FROM tablename;

這個最佳化僅適用於 MyISAM表, 原因是這些表類型會儲存一個函數返回記錄的精確數量,而且非常容易訪問。對於事務型的儲存引擎(InnoDB, BDB), 儲存一個精確行數的問題比較多,原因是可能會發生多重事物處理, 而每個都可能會對行數產生影響。

COUNT(DISTINCT expr,[expr...])

返回不同的非NULL值數目。

若找不到匹配的項,則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內建函數found_rows();

也可以快速求出總數
PHP代碼:

 代碼如下 複製代碼

<?php

 

    $sql =  "select sql_calc_found_rows topic,detail from t limit 5";

    $sql =  "select found_rows()";

    $num = mysql_result($res,0);

?>


這種方法使用時所要注意的問題
引用:
1 必須以select sql_calc_found_rows 開頭
2 這時found_rows() 為 沒有limite 時的行數
以下為一個示範 希望大家看了更加明白
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>


著兩中方法效率如何呢

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.