• 締切済み

800万件のデータ

現在MySQLの4.0.17を使用しています。今度新しくデータベースを作成し、親テーブルと子テーブルを外部キーによって連結しています。また両方のテーブルともInnoDBで作成しています。 ここで質問なのですが、親テーブルのデータ量が800万件ぐらいになりそうなのですが、このような大きなデータベースを扱ったことがありません。どのような点に気をつけていればよいのでしょうか?また、2万件ぐらいのデータベースと比較した場合、やっぱり選択クエリの速度なども劇的に遅くなるものなのでしょうか? 素人の質問で申し訳ありませんがよろしくお願いいたします。

  • MySQL
  • 回答数2
  • ありがとう数4

みんなの回答

  • passepied
  • ベストアンサー率50% (18/36)
回答No.2

800万件のレコードから1レコードを取得する場合と2万件のレコードから1レコードを取得する場合で適切にインデックスが作成されている場合、論理的には処理時間は1.6倍ほどにしかなりません。 したがって、適切にインデックスを設定することが重要です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

800万くらいになると、それなりに遅いでしょうね。 MySQLの速さの象徴はMyISAMですから、 InnoDBであればよけい時間がかかるでしょう。 トランザクションなどどうしても必要かもしれないので むりにMyISAMをお勧めしませんが、であればこのさい 中途半端な4.0系じゃなく、4.1や5.0系へのシフトも 検討した方がよいかもしれませんね。 検索スピードを上げるにはまずは、きちんと正規化 することです。検索用のキーにはindexをつけて おいたり、時系列データなら特定の時期以前の データはDBをわけて管理するなど地道な設定が 高速化につながると思います。

MR_kato
質問者

お礼

ありがとうございました。もう一度設計から見直したいと思います。

関連するQ&A

  • データベースのデータ型に関しまして

    現在、レンタルしているサーバのPHPmyAdminにて、データベースを作成しました。 データベースのエンジンはMyISAMになっており、InnoDB型がいいため、 テーブルの作成時にInnoDB型に設定をしました。 すると、構造タブでみるとデータベース:MyISAM テーブル:InnoDB となっておりますが、テーブルはInnoDBとして扱われているという認識でいいのでしょうか。 勉強中のため、詳しい方がおりましたら、教えていただけると助かります。

    • ベストアンサー
    • MySQL
  • MySQLのバイナリデータについて

    Linux版MySQLで稼働していたデータベースをWindows版で稼働させたいと思っています。 データベースはinnodbです。 my.iniをWindowsの環境に合わせて書き換え、MySQLは起動したのですがテーブルが見れません。 mysqlデータベースは参照でき、ユーザー権限等も書き換えられるのですが、どうやらinnodbが見れないようです。 そもそもLinux版のinnodbはWindows版MySQLでは使用できないのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQL(innodb)のバックアップについて。

    innodbとはMySQLで取り扱えるデータベースの1つで、MySQLで取り扱える他のデータベースと違うところはinnodbにはトランザクション機能がある、というところまではわかっているのですが、innodbのバックアップにはinnodb HotBackupという製品があるようです。MySQLの事もデータベースの事もあまりわかっておらず、ここで質問するのもご迷惑かもしれませんが、MySQLのデータベース(特にinnodb)のバックアップの際には、mysqldumpコマンドだけでは対応できないので、innodb HotBackupという製品があるのでしょうか。何を質問しているかわかりづらいようでしたら申し訳ないですが、どうぞ宜しくお願いします。

  • 外部キーについて、親に挿入した値が子に反映されません

    はじめまして、mysqlとphpを勉強しているものです。 MySQL クライアントのバージョン: 4.0.25、phpは5を利用しています。 外部キーの設定はできたのですが、親に挿入した値が子に反映されません。 DBには会員情報テーブルとプロフィールテーブルがあります。 更新削除ともにカスケードを設定し、ストレージエンジンはinnodbです。 会員情報テーブル ID(オートインクリメント)|ニックネーム プロフィールテーブル ID(外部キーとして会員情報テーブルのIDを参照/オートインクリメント)|地域|コメント 上記のようなテーブルで、まず親テーブルに会員登録情報を送信します。その後、whereで同じIDを持つ行にプロフィールを登録させたいと考えています。 親テーブルには会員情報がきちんと登録されるのですが、子テーブルには何も反映されていません。 データの挿入はphpからクエリを送信して行っています。 書籍やwebで色々と調べたのですが、原因がわかりませんでした。 どなたかアドバイスいただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 追加クエリの遅さを解消したいです。

    外部データベースのデータをAccessのテーブルとして取り込んでから、作業するシステムを作成しています。 日々新規のデータが追加されていく外部データベースの、新規データのみを追加していく追加クエリを作成したのですが、とにかく遅いのです! データは6万件ほどあります。けれど、新規に追加したいデータは、日々30件ほどです。 この遅さを解消する方法はありませんか? 良いアドバイスがありましたら教えて下さい。

  • 巨大なデータに対する検索に適したデータベース

    巨大なデータベースに対する検索をなるべく高速にこなせるフリーのデータベースを探しています(windows)。 これまでmySQL5.5を使って比較的簡単なデータ検索を行ってきました。 データ構造自体は簡単で例えば下記のように name[char] / weight_gram[int] / country [char] 数桁のintと十数文字の文字列情報をもつエントリーで構成されるテーブルとします。 ただ問題がデータの量で、ある事情で10-100億件のエントリー(rows)があり、そのせいで単純なクエリー、例えば select * from my_big_table where weight in (51000,60000,82000) のような簡単な検索にも非常に時間がかかります。 パーティショニング、インデクスを試し、速度は向上しましたがまだ時間がかかりすぎてしまいます(数分)。 最近になってnoSQLのことを知り。その多くは大量のデータ処理に適していると聞き、簡単な比較なども見ましたがどれが最適なのかいまいちよく分かりません。 特に大半がunix/linux環境用でwindowsで利用可能なものは限られているようです。 そこで -Windows 7/vista 64 bitで動く -フリーで利用できる -大量のデータをもつテーブルに対するquery(検索)が高速 -C++ API (mysql connectorのようなもの)がある の条件に合うnoSQLを教えていただけないでしょうか。

  • MySQLに参照整合性制約を実装したテーブルを作成したい

    MySQL4.1.17に、 外部キーで関連付けたテーブルを作成したいのですが、 生成時にエラーが発生してしまいます。 <Error Message> 37000:[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 流しているDDLは以下のとおりです。 テーブル型は両方ともINNODBに設定しています。 どなたか原因がわかる方がいたら、ご教授いただけます でしょうか? よろしくお願いいたします。 CREATE TABLE Entity1( att1 CHAR(10) NOT NULL, PRIMARY KEY (att1) )TYPE=INNODB ; CREATE TABLE Entity2( att1 CHAR(10) NOT NULL, PRIMARY KEY (att1) )TYPE=INNODB ; CREATE INDEX FKEnt2 ON Entity2(att1) ; ALTER TABLE Entity2 ADD FOREIGN KEY (att1) REFERENCES Entity1(att1) ;

    • ベストアンサー
    • MySQL
  • ER図の外部キー

    はじめまして ER図の書き方でFK(外部キー)として記載できるもしくは そう呼べるのはinnodbでの環境に限るのでしょうか? mysqlでmyisamにて構築しているのですが 例えば注文テーブルに商品IDや顧客ID、受注スタッフID、発注スタッフID等の カラムがあったとして、そらぞれのカラムは商品テーブル、顧客テーブル、 スタッフテーブルのプライマリーキーです。 この場合、商品IDは外部キーと呼べるのでしょうか。 また発注スタッフIDが必ず登録されているとは限らないのですがこれも外部キー と呼べるのでしょうか。 よろしくお願いします

    • ベストアンサー
    • MySQL
  • mysql_queryは最大いくつまで登録できるのでしょうか。

    いつもお世話になっております。 またまた詰まってしまいました。 mysql_query関数で、30程度のデータをひとつのレコードとしてデータベースに登録しようとしているのですが、どうしても登録に失敗してしまいます。 データベース、テーブルはphpMyAdminで作成しました。 id(auto_increment:主キー),a(varchar(20)),b(aと同様),c・・・,z(varchar(20))とします。 $sql="INSERT INTO table(a,b,・・・z) VALUES('$a','$b',・・・'$z'); mysql_query($sql,$conn); と、しています。$connには問題ありません。一応、すべて文字列を登録しようとしています。(数字もありますが、文字列としています) ためしに簡単なデータベース、テーブルを作成し、実行してみるとうまくいきました。 何が悪いのでしょうか・・・(変な質問になってしまいまして、すみません。)

    • ベストアンサー
    • PHP
  • Accessで連続データってできますか?

    Aテーブル(データベース)からBテーブルに必要なレコードを抽出して、Bテーブルで編集しています。 Bテーブルで編集したレコードをCテーブルに移動する際に、連続データのフィールドが必要になったので、テーブルのオートナンバー型フィールドを一つ追加しましたが、うまくいきません。 追加クエリでB→Cに移動させるんですが、キー違反がでてクエリが動きません。 できれば、クエリで連続データを作成して、Cテーブルに追加させたいんですが、クエリで連続データって作れるものなのでしょうか?