[英]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
上有一個索引,則它將使用該索引,而無需從數據頁中讀取任何數據。
如果只需要計數而不是數據,則第二個版本會更清晰,並且應該會更好。
我將使用第二個有兩個原因:
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.