簡體   English   中英

使用計數而不是mysql_num_rows?

[英]using count instead of mysql_num_rows?

之間的區別(性能明智)

$var = mysql_query("select * from tbl where id='something'");

$count = mysql_num_rows($var);

if($count > 1){

    do something

}

$var = mysql_query("select count(*) from tbl where id='somthing'");

PS:我知道mysql_ *已過時。

第一個版本返回整個結果集。 如果您的表很寬,那么這可能是大數據量。 如果id上有一個索引,它仍然需要讀取原始數據以填充值。

第二個版本僅返回計數。 如果id上有一個索引,則它將使用該索引,而無需從數據頁中讀取任何數據。

如果只需要計數而不是數據,則第二個版本會更清晰,並且應該會更好。

我將使用第二個有兩個原因:

  • 如您所說,不建議使用mysql_ *
  • 如果您的表很大,則將大量數據放入$ var中只是為了對其進行計數。

select *要求mysql從該表中獲取所有數據(根據條件)並將其提供給您,這不是一個非常可優化的操作,它將導致大量數據被組織並通過套接字發送給PHP。

由於您隨后對該數據不執行任何操作,因此您已要求mysql對所有數據進行任何處理。

相反,僅要求mysql對滿足條件的行數進行count()不會導致它嘗試向您發送所有數據,並且將導致查詢速度更快,尤其是在對id字段進行索引的情況下。

總的來說,如果您的php應用程序仍然很簡單,並且仍然是很好的實踐,那么這可能被認為是微優化。

選擇* FROM tbl_university_master;

返回2785行

執行時間:0.071秒

傳輸時間:7.032秒

總時間:8.004秒


從tbl_university選擇COUNT(*);

已返回1行

執行時間:0.038秒

傳輸時間:0秒

總時間:0.039秒

第一個收集所有數據並計算結果集中的行數,這是性能密集型的。 后者只是進行快速計數,因此速度更快。

但是,如果您同時需要數據和計數,則執行第一個查詢並使用mysql_num_rows (或PDO中類似的東西)比執行另一個查詢進行計數更明智。

實際上,不建議使用mysql_ *。 但是使用MySQLi或PDO時也是如此。

我認為使用

$var = mysql_query("select count(*) from tbl where id='somthing'");

效率更高,因為您沒有根據從MySQL返回的行數分配內存。

select * from tbl where id='something'從具有ID條件的表中選擇所有數據。

COUNT()函數返回與指定條件匹配的行數。

有關更多閱讀,練習和演示的信息,請訪問= >>> w3schools

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM