2009-08-15 44 views
1

以下是我用來獲取數據庫中照片總數的當前代碼,估計數甚至可以接受,因爲結果數僅用於確定哪個文件夾號碼我想上傳到文件夾的文件夾餘額。以最快的方式從PHP中的mysql表中獲取總記錄

我有一種感覺,有一種更好的方式,然後我在下面使用?

$sql = 'SELECT auto_id FROM friend_user_photo'; 
$query = executeQuery($sql); 
$rowcount = mysql_num_rows($query); 

$ ROWCOUNT返回在friend_user_photo表記錄的數量

UPDATE:

是不是有什麼辦法可以閱讀有關數據庫的信息。那麼使用上面的方法或COUNT可能會更快?

+0

從'mys2ql'改變爲'mysql',假設爲typo =) – 2009-08-15 14:56:52

回答

5

您還可以使用COUNT。

$sql = 'SELECT COUNT(*) FROM friend_user_photo'; 
$query = executeQuery($sql); 

這將返回包含結果數量的單個行。這也是一個常規的聚合函數,所以你可以做連接,子查詢,條件(WHERE),分組和所有這些好東西。

您也可以將它視爲另一個字段,以便您可以將它別名,然後在連接和子查詢中使用它。您還可以選擇額外的數據,例如:

$sql = 'SELECT COUNT(*), name FROM table GROUP BY name 

這將返回名稱的不同列表,但也將包含的存在爲每個名字的記錄數。

編輯替代計數()

如果你不想使用COUNT(*),您也可以使用「節目表狀態」。例如:

$sql = "SHOW TABLE STATUS LIKE 'friend_user_photo'"; 
// Note, this LIKE is a regular LIKE, so wild cards can be used 

這將返回一排各種元數據,包括行,而且還包括密鑰長度(以字節爲單位)和數據長度(以字節爲單位),以及大量的其他數據。這通常也是相當快的,因爲它只是將元數據拉到合適的位置來運行COUNT(*)等集合函數(只要表未被當前正在運行的另一個查詢鎖定)。

+0

謝謝,我只需要記錄的總數nu8mber,沒有任何條件在哪裏,總數甚至不是必須是準確的,它可以是一個估計,我想可能有一種方法來讀取表格信息,並快速得到行估計也許然後做一個選擇查詢 – JasonDavis 2009-08-15 14:55:39

+0

謝謝,所以「顯示錶狀態」應該是比其他任何事情都快嗎? – JasonDavis 2009-08-15 16:46:34

+1

它應該證明比其他任何事情都快,因爲它只是拉動表的元數據來運行像SELECT這樣的邏輯查詢。如果表已被查詢鎖定,那麼它當然會慢。 – 2009-08-15 16:56:24

4

SELECT COUNT(auto_id)FROM friend_user_photo

會更直接,你就不必使用mysql_num_rows($查詢)。您只需檢查從$ query返回的值。

編輯:由於你更新了你想要的其他想法,而不是COUNT。

如果auto_id僅僅是一個整數或長,等等...這開始於1和遞增1,然後怎麼樣LIMIT:

SELECT auto_id FROM friend_user_photo LIMIT 0,1 

我不知道,如果它的速度更快,但...

編輯#2:

根據這些帖子:

如果你正在使用MyISAM的再算上是最快的:

http://lists.mysql.com/mysql/184095 -

選擇從表COUNT(*)是最快對於MyISAM因爲它緩存 行計數。這也將包含任何具有空值的行。

Whats the best way to get total # of records in a mysql table with php?

+0

值得注意的是,根據所使用的引擎,COUNT()可能會慢很多:http:// www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ – 2009-08-15 14:53:21

+0

感謝您的信息 – JasonDavis 2009-08-15 16:47:04