2013-03-20 30 views
0

是什麼(性能明智)使用count而不是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'"); 

P.S的區別是:我知道mysql_ *已被棄用。

+2

你爲什麼不運行一些測試,看看? – j08691 2013-03-20 13:41:29

+2

如果你只是想'count'去第二個。第一個爲你提供'數據'和'計數'。 – Rikesh 2013-03-20 13:41:39

+0

從PHP 5.5.0開始不推薦使用mysql_擴展。改用PDO。 但是要回答你確切的問題,我想最好的方法是做一些測試。 – cen 2013-03-20 13:44:14

回答

1

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

既然你對這些數據什麼也不做,你已經要求mysql做了大量的數據處理。

相反,只要詢問mysql到count()適合條件的行數不會導致它試圖向您發送所有數據,並且會導致更快的查詢,尤其是如果id字段已建立索引。總的來說,如果你的php應用程序仍然很簡單,但仍然是很好的做法,這可能被認爲是一種微型優化。

1

我會用第二個有2個原因:

  • 正如你所說,mysql_ *已被棄用
  • 如果你的表是巨大的,你只有$ VAR將數據的相當大的量來計算它。
0

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

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

事實上,mysql_ *將被棄用。但是在使用MySQLi或PDO時也是如此。

3

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

第二個版本只返回計數。如果在id上有索引,那麼它將使用該索引並且不需要從數據頁面讀取任何數據。

如果你只想計數而不是數據,第二個版本更清晰,應該表現更好。

0

我想用

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

更爲有效,因爲您根據被從MySQL返回的行數不分配內存。

0

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

COUNT()函數返回符合指定條件的行數。

更多的閱讀和實踐和示範,請訪問= >>>w3schools

1

SELECT * FROM tbl_university_master;

2785行(S)返回

執行時間:0.071秒

轉換時間:7.032秒

總時間:8.004秒


SELECT COUNT(*)FROM tbl_university;

1行(S)返回

執行時間:0.038秒

轉換時間:0秒

總時間:0.039秒

相關問題