| 方法 | 耗時(秒) |
|---|---|
mysql_num_rows()(需 fetch 所有列) | 35.27 |
COUNT(*)(資料庫端聚合) | 0.07 |
mysql_num_rows():PHP 驅動程式必須**接收完整結果集**到客戶端緩衝區,再計算行數 → 網路傳輸、記憶體佔用大、慢COUNT(*):MySQL **儲存引擎層直接回傳計數**(MyISAM 為 O(1),InnoDB 掃描最小索引) → 僅傳回一個整數 → 極快| 場景 | 建議 |
|---|---|
| 僅需總筆數 | COUNT(*) |
| 需處理每一列資料 | mysql_num_rows() + 迴圈 |
| 分頁總數 | SELECT COUNT(*) FROM ... WHERE ... |
| 條件複雜、需 JOIN | SELECT COUNT(*) FROM (複雜查詢) AS t |
COUNT(*) 需掃描聚簇索引或次要索引counter table 或用 information_schema.TABLE_ROWS 估算(非精確)COUNT(1)、COUNT(primary_key)、COUNT(*) 在 InnoDB 效能相同