• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データを西暦ごとにテーブルに分けたい)

データを西暦ごとにテーブルに分ける方法を教えてください

このQ&Aのポイント
  • テーブルtableには30万件ほどのデータがありますが、1年ごとにテーブルを分割したいです。
  • 現在のデータ量の多さから、phpmyadminを使用する方法では難しいです。
  • 効果的な分割方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.3

>現在、SELECT文での絞り込みに数十秒かかります。 適切なインデックスが生成されていれば、それほどは時間が掛からないはず。 副問い合わせ等を過剰に使われているのではないでしょうか?例えば、1件の読み込み毎にすべてのデータを読み込んでいたり。 http://gihyo.jp/dev/serial/01/sql_lifesaving/0001 http://www.geocities.jp/mickindex/database/db_optimize.html 読み込み時間の短縮のチューニングは数ありますが、読み込みのSQL自体に問題があることが多いです。具体的な読み込みSQLがわからないのでココでは割愛します。 テーブル分割は避けたほうが無難です。 select結果のinsertは↓ 1年ずつ実行するのが確実。 http://www.ksknet.net/postgresql/selectinsert.html

その他の回答 (2)

回答No.2

プログラムを作らないと、SQLだけでは難しい思います。 私の作ったツールの場合で恐縮ですが、簡単に出来ますので、よろしければお試し下さい。 注意:ツールはデータベース名(スキーマ名)がMySQLに接続されますので、テーブル名に陽にデータベース名(スキーマ名)を指定する必要があります、プログラム例は作業用データベース(_W)上にあるテーブルを使っています。 プログラム例: 100 PROGRAM=NOT 200 DATA=YES{3}{YES,NO} 300 =IF{_DATA!='YES'}EXIT{}; 400 =SET{W_TBL=_W+'_TABLE'}; 500 =SQL1{SELECT DISTINCT YEAR FROM ?W_TBL?}; 600 =LOOP:SQL1_NEXT{W_YEAR}EXIT{}; 700 =COPY_TABLE{?W_TBL??W_YEAR?}{?W_TBL?}{WHERE YEAR=?W_YEAR?}; 800 =BACK{LOOP};

spinia0120
質問者

お礼

最初はPHPで分岐条件をプログラムしようとも思ったのですが、量が多いため処理に不安があります。 SQL単体ではなく、やはりプログラムを構築しなければいけませんか。 教えていただいたコードはI言語のようですが、I言語でしたらこの量の処理も可能でしょうか。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

何が問題なのかわかりませんが、GUIのツールは使えるが、SQLを知らないので書けないということでしょうか? そもそも、そういう事をしたいというのは何故でしょう?問題設定がおかしい気がします。

spinia0120
質問者

お礼

>GUIのツールは使えるが、SQLを知らないので書けないということでしょうか? 簡単なSQLなら使えますが、複数のテーブルに複数条件を適用するような複雑なSQL文はまだ使うことができないため、質問させていただきました。 >そもそも、そういう事をしたいというのは何故でしょう? 現在、SELECT文での絞り込みに数十秒かかります。 単純にテーブルのデータ量が多いのが原因なので、西暦ごとに分割しようと判断した次第です。

関連するQ&A