■データベース
os:linux
mysql
バージョン:5.1.73
ストレージエンジン:myisam
Aテーブル:indexあり レコード件数:10,000,000件
■webサーバー
os:linux
開発システム:php
<概要>
linux環境で集計phpにてAテーブルを作成します。
windows環境でAテーブルの内容を閲覧phpにて表示させます。
現象を下記に記述します。
・linux環境
1.DB上のAテーブルが毎朝の更新処理で作成(更新)されます。(9時30分頃完了)
※作成処理はこれで完了です。翌朝まで処理は起動しません。
・windows環境
2.9時30分から11時59分59秒の間にAテーブルでselect文を発行
3.3秒程でselectされた内容が表示されます。(この内容はキャッシュされます。)
4.この後、未キャッシュのselect文を9時30分から11時59分59秒の間に何度発行しても
3秒程でselectされた内容が表示されます。(この内容もキャッシュされます。)
5.この後、12時00分00秒にAテーブルで同じselect文を発行
6.3秒程で表示されていたものが、5分程の時間を要して表示されます。
※index使用せず、テーブルフルスキャンしていると思われます。
(この内容もキャッシュされます。)
7.この後は、未キャッシュのselect文を12時00分00秒から14時59分59秒の間に何度発行しても
3秒程でselectされた内容が表示されます。(この内容もキャッシュされます。)
8.この後、15時00分00秒にAテーブルで同じselect文を発行
9.3秒程で表示されていたものが、又5分程の時間を要して表示されます。
※これもindex使用せず、テーブルフルスキャンしている。(この内容もキャッシュされます。)
10.その後は、18時00分00秒、21時00分00秒と3時間間隔で同現象となります。
要望としまして
上記の3時間間隔でフルスキャンしてしまう現象を止めたいと思っています。
my.cnfの内容、phpに組み込まれている内容など調べてみたのですが、
時間によってフルスキャンしてしまう(index使用しない)設定がみつかりませんでした。
オプティマイザの挙動(統計情報も関わっている?)についても調べたのですが
上記現象に繋がる情報を取得出来ませんでした。
この現象を解決していただける方、どうかご教示お願いいたします。
No.2ベストアンサー
- 回答日時:
>Aテーブルは集計結果を保持しています。
集計結果からさらに集計ってしてます?
むしろ集計後の集計をしていないならインデックスは不要でつねにデータの垂れ流しですから
イメージ的には
膨大なデータがあって→その日参照したいデータだけ朝つくってテーブルに保持→
パターン1)ユーザーは絞り込みや集計せずそのデータを読み出すだけ
解決策:キャッシュもなにも不要で、毎回同じデータを抽出するだけなら
ファイルか何に保持しておけば済むでしょう
パターン2)あくまでもユーザーは任意の条件で抽出(WHEREやらHAVINGやら)
もしくは、集計(SUMやらCOUNT)をおこなう
解決策:検索条件を想定し、Aテーブルに適切なインデックスを設定して、抽出する
No.1
- 回答日時:
レコード数にもよりますが、集計に3秒は微妙ですね・・・なんか遅いように感じますけど
Aテーブルは集計結果を保持しているのではなく生データってこと?
キャッシュをどうするこーするより、適切なindexを貼ればいいような気がしますが・・・
もともと5分程の時間かかるようなSQL文なんじゃないんですかねぇ?
EXPLAINなどでチェックはされていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) Excel について <TIMEVALUE> 3 2022/10/20 15:57
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
PRIMARY KEYのコピー
-
DB2のSQLコマンドについて
-
Access 別のDBに対してDlookup...
-
結合したテーブルをSUMしたい
-
ExcelのMatch関数のようなもの...
-
あってますか?SQL
-
ADO+ODBCでテーブルに接続する...
-
既存データをINSERT文にして出...
-
SQLサーバに対するSQL文で抽出...
-
ExcelのVLOOKUP関数の動作をMyS...
-
改行を含んだデータのインポート
-
テーブルデータの上書きをした...
-
データベースphpMyAdminの接続解除
-
ACCESS クエリーでソートの不具合
-
副問合せを使わずにUNIONと同様...
-
テーブル名が可変の場合のクエ...
-
行と列の入れ替え検索(行は可...
-
2つのテーブルをLIKE演算子のよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
Accessの構成をコピーしたい
-
ACCESSのVBAにてExcelに行...
-
ExcelのMatch関数のようなもの...
-
ACCESS クエリーでソートの不具合
-
ExcelのVLOOKUP関数の動作をMyS...
-
データ無し時は空白行にしたい...
-
2つのテーブルをLIKE演算子のよ...
-
同一テーブル内での比較(最新...
-
ADO+ODBCでテーブルに接続する...
-
複数のテーブルからデータを取...
-
PRIMARY KEYのコピー
-
SQLです!!教えてください。あ...
-
改行を含んだデータのインポート
-
SQLです!!教えてください。あ...
-
Excelでしりとりを作る方法
おすすめ情報
ご回答いただきまして誠にありがとうございます。
Aテーブルは集計結果を保持しています。
EXPLAINで見ると、type:ref、possible_keys:Index01、key:Index01、rows:28687 で
もともとはIndex使用してくれているみたいなのですが。。
select文を発行する時間帯によって挙動が変わる現象がどうにも解せません。
お手数をお掛けしますが何かありましたら、引き続きご教示お願いいたします。