![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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 のところが問題なのかなと考えております。
お分かりになる方、是非アドバイスをお願いします。
No.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万とかあると結構時間かかりそうです。
この回答への補足
すみません、説明が不足しておりました。
dateカラムに日付を入れておりまして、過去7日間のログを集計しており、pathカラムにあるアクセスのあった絶対パスのURL前方一致検索して、カウントさせております。
結果は、
/index.php?id=9024 (2537)
/index.php?id=9005 (2488)
/index.php?id=9023 (2437)
という形で上位3件を表示できます。
頂いたコードを当てはめて確認してみたいと思います。
ありがとうございます、mysql_query のところで遅くなっているのがわかりました。どうやら、mysql_fetch_arrayでは無かったようです。
phpMyAdmin との速度の差について、類似した例を探してみます。
No.3
- 回答日時:
>index は作られて降りませんでしたが、phpMyAdmin で同じSQLをたたくと早くて、phpにすると遅いのがイマイチ理解が出来ません。
よろしくお願いします。それはよく分かりませんが
この場合pathにindexを作ると劇的に改善されると思います。
参考URL:http://www.cgis.biz/mysql/12.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで[]の使い方について
-
PHP 10件表示 "前へ" "次へ"
-
mysql_fetch_array の速度について
-
アラートでyes noを作りたいです。
-
PEAR DBでの行取得について
-
ヒアドキュメントについて
-
PHPのスタイルシート割り当て
-
実行時エラー3131 FROM 句の構...
-
MySQLでデータベースにデータin...
-
spl拡張子保存
-
データ削除のスクリプト
-
PHP+MYSQLでレコードの表示させ方
-
テキストボックスに入れた内容...
-
codeigniter 複数モデルでトラ...
-
VBAをつかってクエリの情報を抽...
-
SELECT文を発行して、ACCESSよ...
-
MYSQL UPDATE
-
csvファイルのデータをSQLiteに...
-
日またぎの計算
-
SQLで返り値が空とでる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
phpでmysqlを使ってデータベー...
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
DBで検索結果に該当するデータ...
-
SELECT結果から動的にコンボボ...
-
SQLiteのhtml表示
-
PHPでMySQLデータを呼び出し、w...
-
mysqlから取得した配列をカンマ...
-
mysql>PHPにデータ表示、10件ご...
-
checkboxクリック時、SQLを実行...
-
sortable ギブアップです…助け...
-
エクセルVBAについて
-
VBA初心者です。
-
検索結果($_POST)が2ページ目...
-
PHPでMySQLのデータを2次元配...
-
PHP 10件表示 "前へ" "次へ"
-
日付範囲で検索した後に降順に...
-
PHP MySQL で updateができま...
-
syntax errorの原因について
おすすめ情報