MySQLとPHPを使ったサイト制作の事で質問です。


商品やサービスをなどを紹介するサイトを幾つか制作しようと思うのですが、データベースとなるMySQLのテーブルはサイトごとに分けた方が良いのか、仕様が同じなのでまとめて同じテーブルを使った方が効率的なのか悩んでいます。

普通に考えると同じ仕様であれば同じテーブルを使った方が良さそうなのですが、データの表示が遅くなるのでしょうか?

別々のテーブルにしたとしても同じサーバーなのでまとめた場合と表示速度などは変わらないのでしょうか?

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2010/04/15 18:42:51
  • 終了:2010/04/22 18:45:04

ベストアンサー

id:tail_furry No.7

敷守ほむら回答回数74ベストアンサー獲得回数72010/04/16 18:30:52

ポイント17pt

データベースを分けるのではなくて、テーブルを分けるのですよね?


ならば、分けるべきです。


仮に全部のデータが入ったテーブルから、特定のサイトのデータのみを取り出すSQL文を考えてみると、

select * from 全部入ったテーブル where サイト = 特定のサイト

と、WHERE文で1回は絞らなければならないため、同じテーブルでサイトごとに切り替えると、応答が遅くなるだろうことが予測できると思います。


データの量が少ない状態ではあまり応答の遅さを感じないと思いますが、データの量が増えてくると、インデックスを貼らないと応答が遅くなってくるはずです。

別々のサイトを一緒にしたテーブルだと、サイトを切り替える列に対してのインデックスに容量が必要になります。容量に空きが十分あればいいのですが、容量が少なくなってくると、この必要なインデックスが邪魔に感じるようになります。

サイトごとにテーブルを分けた場合には、たとえば、あるサイトではデータの量がすごく多くなったけど、別のサイトではデータの量が少ない、といったときでも、すごく多くなったサイトのテーブルに対してのみチューニングをかければいいのでメンテナンス的にいいです。


また、テーブルを分けるメリットとして、とりあえず思いついた点を挙げてみると、

  • テーブルごとにエクスポート/インポートすることができるので、バックアップの面でメンテナンスしやすい。
  • 現状で仕様が同じでも、サイトごとに機能の拡張が必要になった場合、他のサイトのデータのことを気にせずに拡張できる。
  • 間違ったSQL文を発行したときに、被害を最小限に抑えることができる

もし、全てのサイトのデータを見る必要性が生じたら、単純にビューで結合したものを使えばいいだけですし。

その他の回答(6件)

id:Bombastus No.1

ホーエンハイム回答回数409ベストアンサー獲得回数522010/04/15 19:05:58

ポイント18pt

別々のテーブルにしたとしても同じサーバーなのでまとめた場合と表示速度などは変わらないのでしょうか?

その通りです。


将来性を考えると、サイト毎にテーブルを分けた方が良いでしょう。

アクセス量が多くなったテーブルを、別のDBサーバに切り離すことができますので。

id:koriki-kozou No.2

koriki-kozou回答回数480ベストアンサー獲得回数792010/04/15 19:10:54

ポイント17pt

モールであれば共有してもかまわない

表示が遅くなることはない

管理者としては楽になるように見えるが実はとんでもなく大変

規模拡大、負荷増大時の対処が難しい


互いにまったく無関係のサイト同士であるならば同一の環境を数だけ用意する

規模拡大、負荷増大時のサイト分割、引越しなどが楽


分けるほうに一票

id:taknt No.3

きゃづみぃ回答回数13538ベストアンサー獲得回数11982010/04/15 19:49:35

ポイント17pt

別にサイトごとテーブルを わけなくてもいいと思いますよ。

ただ、どのサイトのデータなのかそれを 区別する項目を作ればいいだけです。

サイトごとに テーブル名の変更など 行うのが 面倒かと思いますが・・・。

id:hiroponta No.4

ぽこたん回答回数517ベストアンサー獲得回数262010/04/15 20:10:11

ポイント17pt

私も分ける方に一票です。

上の方も書いていますが、他のサーバーに移動したりする時にも便利です。同じサーバーで標示速度は変わらなくても、別のサーバーにするという選択肢を後に残しておいた方が良いというのは、別の方と同意見です。実際、私も小分けしていて、その方が実は管理も(後から考えると)分かりやすくなったりします。

1、2個の店舗なら何と言う事は無いかもしれませんが、10、20となってくると、ごちゃごちゃしてきて、何だか意味分からなくなりますので、分けるとすっきりします。

id:kanarrr No.5

かなえ回答回数29ベストアンサー獲得回数12010/04/15 20:33:34

ポイント17pt

私は分けなくていいとおもいますよ。

id:cuspos No.6

cuspos回答回数49ベストアンサー獲得回数102010/04/16 10:13:02

ポイント17pt

基本的には別テーブルでも同一デーブルでも表示速度には影響しない可能性が高いです。

(データ量、アクセス頻度、indexのはりかたによって大きく変わりますし、要件によって大きく変化が出る部分ですのでなんとも言えない部分もありますが)


で個人的には「分ける方に一票」。

WEBシステムの中で、RDBMSは分けたり負荷分散するのが難しい部分なので、後々の引越し等を考えても分けられるなら分けたいところです。

id:tail_furry No.7

敷守ほむら回答回数74ベストアンサー獲得回数72010/04/16 18:30:52ここでベストアンサー

ポイント17pt

データベースを分けるのではなくて、テーブルを分けるのですよね?


ならば、分けるべきです。


仮に全部のデータが入ったテーブルから、特定のサイトのデータのみを取り出すSQL文を考えてみると、

select * from 全部入ったテーブル where サイト = 特定のサイト

と、WHERE文で1回は絞らなければならないため、同じテーブルでサイトごとに切り替えると、応答が遅くなるだろうことが予測できると思います。


データの量が少ない状態ではあまり応答の遅さを感じないと思いますが、データの量が増えてくると、インデックスを貼らないと応答が遅くなってくるはずです。

別々のサイトを一緒にしたテーブルだと、サイトを切り替える列に対してのインデックスに容量が必要になります。容量に空きが十分あればいいのですが、容量が少なくなってくると、この必要なインデックスが邪魔に感じるようになります。

サイトごとにテーブルを分けた場合には、たとえば、あるサイトではデータの量がすごく多くなったけど、別のサイトではデータの量が少ない、といったときでも、すごく多くなったサイトのテーブルに対してのみチューニングをかければいいのでメンテナンス的にいいです。


また、テーブルを分けるメリットとして、とりあえず思いついた点を挙げてみると、

  • テーブルごとにエクスポート/インポートすることができるので、バックアップの面でメンテナンスしやすい。
  • 現状で仕様が同じでも、サイトごとに機能の拡張が必要になった場合、他のサイトのデータのことを気にせずに拡張できる。
  • 間違ったSQL文を発行したときに、被害を最小限に抑えることができる

もし、全てのサイトのデータを見る必要性が生じたら、単純にビューで結合したものを使えばいいだけですし。

  • id:b-wind
    何というか「そのほかの要件次第」としか言いようがないと思うんだが、
    疑問を投げかけてる回答が一つもないのは驚き。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません