一言で言えば、多くの配列で PHP の array count() を使用する方が、SQL の行カウントを複数回使用するよりも高速ですか?
COUNT(*) 関数に起因する遅いクエリに問題があります。私が何をしているのかを説明し、それから私が予想していることはかなり速いかもしれません。
現在、各反復で約 20,000 行をカウントする関数をループしています。1 年の各月の行数を返します。
// CREATE MONTHLY LINKS
public function monthly_links() {
$months = array('','January','February','March','April','May','June','July','August', 'September','October','November','December');
for ($i=1 ; $i <= 12 ; $i++) {
$array[] = "<a href='monthly.php?month=" . $i . "&status=3'>" . $months[$i] . " " . $this->chosen_year() . " (" . $this->number_positions_month_year($i, $this->chosen_year()) . ")</a>";
}
return $array;
}
// SHOW NUMBER OF POSITIONS FOR EACH MONTH/YEAR
public function number_positions_month_year($month, $year) {
$sql = $this->client_positions_sql() . " AND MONTH(`exp_date`) = " . $month . " AND YEAR(`exp_date`) = " . $year;
$res = $this->conn->query($sql);
$count = $res->num_rows;
return $count;
}
上記の例では、コードはそれほど重要ではありません。なぜなら、本質的に私が求めているのは、次のことを行う方が速いからです...?
- 各月の対応する ID を配列にダンプしながら、テーブルを 1 回クエリします (12 個の配列があります)。
- 各配列で PHP count() を使用して、各月のエントリ数を取得する