mysql:14106
From: hama <hama <smilestyle55@xxxxxxxxxx>>
Date: Tue, 10 Jul 2007 11:35:04 +0900
Subject: [mysql 14106] Re: ログのカウント方法
こんにちは☆ SQL文の実行が遅いな〜と感じたら、インデックスを使うと早くなる場合がありますね! MySQL:インデックスまとめメモ http://www.res-system.com/item/550 複合インデックス http://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html 検索が早くなるかな?(・∀・) 07/07/09 に Hisamitsu Issei<ds1i-hsmt@xxxxxxxxxx> さんは書きました: > > 久光です > > > > > (2)count関数中にcase式を入れて、一度で複数の日付の範囲を集計できるようにしま > す。 > > count(case when dt between '2007-03-01 00:00:00' and '2007-03-31 23:59:59' > then 1 else null end) as a1, > > from material left join log_mate on material.id=log_mate.mate_id > and dt between '2007-1-31 0:0:0' and '2007-7-31 23:59:59' group by id,name > order by id,name ; > > ・CASEを使って条件に合うものを別個に集計する方法 > ・FROMの中に日付の絞り込みも入れてしまう方法 > > CASEはここで使えることが思いつかなかったです。言われてみれば使えま > すねコレが。FROMにいたってはこんな形で絞り込む条件が入れられるとは知 > りませんでした。 > > で、さっそく試してみたのですが、3時間ほど計算しても実行結果が返っ > てこなかったです。SQL文が間違ってたのかと思い、あれやこれや試したん > ですが全然実行結果が返ってこず。 > ログファイルが大きすぎるのかもしれないと思って、79万行あるデータを > 今年の6月30日〜7月1日の2日間だけの2600行に減らして、さらにSQL文を下 > 記のように単純にしたところ > > SELECT > material.id, > COUNT( > CASE WHEN log_mate.datetime > BETWEEN '2007-06-30 00:00:00' > AND '2007-06-30 23:59:59' > THEN 1 > ELSE NULL > END ) AS a1 > FROM material > LEFT JOIN log_mate ON material.id = log_mate.mate_id > AND test.datetime > BETWEEN '2007-6-29 0:0:0' > AND '2007-7-1 23:59:59' > GROUP BY material.id > ORDER BY material.id > > 130秒くらいでようやく実行結果が返ってきました。結果は私が欲しがっ > ていたとおり、利用がなければ「0」が返ってくる部品一覧表になっていま > した。すごいです。ありがとうございました。 > > こんどの問題は実行時間が非常に長い点です。自分のパソコン(CoreDuo > 2GHz)の処理能力がひどく劣っているとも思えないし、でもSQL文はちゃん > と動作することがわかったので、まずは気長に一晩くらい回しっぱなしにし > てみます。EXCELにペタペタ貼付けてエッサホッサと行のずれを揃える仕事 > を考えれば、一晩ほっといて結果一覧がでる方がかなり効率的なので。 > > あとはSQL一発ってわけにはいかないけどテンポラリー・テーブルを組み > 合わせる方法も現実的な速度でPHPを使わずに一覧表が作れるかもしれない > と考えてます。 > > なんにせよおかげさまで進歩しました。ありがとうございます。 > > > > ================================= > == HISAMITSU ISSEI == > == DS1I-HSMT@xxxxxxxxxx == > http://www.ne.jp/asahi/pro/his/ > ================================= > >
14100 2007-07-08 16:41 [Hisamitsu Issei <ds1] ログのカウント方法 14101 2007-07-08 19:04 ┣["F.Y" <fumi_sby@xxxx] 14102 2007-07-08 21:14 ┗[忠犬 KEN公 <ken_ken_] @ 14103 2007-07-09 21:19 ┗[Hisamitsu Issei <ds1] 14104 2007-07-09 21:55 ┣["F.Y" <fumi_sby@xxxx] -> 14106 2007-07-10 11:35 ┗[hama <smilestyle55@x]