こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

mysql_fetch_array の速度について

DBに入れたアクセスログの集計で困ったことがあります。
phpMyAdmin でSQLを作成し実行すると、1秒で済むのですがPHPにして、ブラウザからアクセスすると5分以上かかります。ちなみにアクセスログの行数は10万行ほど。
問題のPHPのコードは下記です。
--
$sql = 'SELECT path, COUNT(path)AS cnt FROM `logs` '
. ' WHERE `path` LIKE \'/news.php?id=%\' '
. ' AND TO_DAYS(NOW()) - TO_DAYS(date) <= 7'
. ' GROUP BY path '
. ' ORDER BY `cnt` DESC '
. ' LIMIT 0 , 3';

$res = mysql_query($sql,$dbh) or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
echo $row[path];
echo "(".$row[$cnt].")<br>";
}

--
mysql_fetch_array のところが問題なのかなと考えております。
お分かりになる方、是非アドバイスをお願いします。

投稿日時 - 2008-03-15 01:16:09

QNo.3863831

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>index は作られて降りませんでしたが、phpMyAdmin で同じSQLをたたくと早くて、phpにすると遅いのがイマイチ理解が出来ません。よろしくお願いします。

それはよく分かりませんが
この場合pathにindexを作ると劇的に改善されると思います。

参考URL:http://www.cgis.biz/mysql/12.htm

投稿日時 - 2008-03-15 11:31:34

補足

pathにindexを作成しました。
30秒ほど早く実行できましたが、まだまだ乖離があります。

投稿日時 - 2008-03-16 09:37:46

ANo.2

indexつけてます?
「mysql index 作成」でググると沢山でてきます

投稿日時 - 2008-03-15 01:32:32

補足

このテーブルを調べたらindexがありませんでした。
ググって改善してみます、
index は作られて降りませんでしたが、phpMyAdmin で同じSQLをたたくと早くて、phpにすると遅いのがイマイチ理解が出来ません。よろしくお願いします。

投稿日時 - 2008-03-15 01:49:49

ANo.1

10万行を全て表示してるんですか?

$s = time() + microtime();
$res = mysql_query($sql,$dbh) or die(mysql_error());

$t = time() + microtime() - $s;
error_log(sprintf("Query: %.4f", $t));

while ($row = mysql_fetch_array($res)) {
echo $row[path];
echo "(".$row[$cnt].")<br>";
}
$t = time() + microtime() - $s;
error_log(sprintf("While: %.4f", $t));

こんな風にしてエラーログを出してみると、どこで時間がかかっているか解かるんじゃないですかね?
whileが10万とかあると結構時間かかりそうです。

投稿日時 - 2008-03-15 01:24:01

補足

すみません、説明が不足しておりました。
dateカラムに日付を入れておりまして、過去7日間のログを集計しており、pathカラムにあるアクセスのあった絶対パスのURL前方一致検索して、カウントさせております。

結果は、
/index.php?id=9024 (2537)
/index.php?id=9005 (2488)
/index.php?id=9023 (2437)
という形で上位3件を表示できます。
頂いたコードを当てはめて確認してみたいと思います。

投稿日時 - 2008-03-15 01:29:14

お礼

ありがとうございます、mysql_query のところで遅くなっているのがわかりました。どうやら、mysql_fetch_arrayでは無かったようです。
phpMyAdmin との速度の差について、類似した例を探してみます。

投稿日時 - 2008-03-16 12:18:55

あなたにオススメの質問