17

「site1」という名前のデータベースを使用しているWebサイトがあります。同じサーバーに別のサイトを配置し、「site1」のテーブルの一部も使用することを計画しています。

したがって、「site1」(最初のサイト固有のデータ用)、「site2」(2番目のサイト固有のデータ用)、「general」(共通テーブル用)のような3つの異なるデータベースを使用する必要があります。データベースgeneralとsite1およびsite2の間にjoinステートメントがあります。または、すべてのテーブルを1つのデータベースに配置する必要がありますか?

行うべきベストプラクティスはどれですか?それぞれの状況でパフォーマンスはどのように異なりますか?MySQLを使用しています。では、特にMySQLの状況はどうですか?

前もって感謝します...

4

2 に答える 2

12

パフォーマンスの観点からは、違いはありません。インデックスを所定の位置に保持するだけで、単一のDBを使用しているか複数のDBを使用しているかに気付くことはありません。

パフォーマンスとは別に、私が考えることができる2つの小さな影響があります。1。DB間で外部キーを持つことはできません。2.使用状況またはアプリケーションに基づいてDB内のテーブルをパーティション化すると、簡単な方法で権限を管理するのに役立ちます。

于 2013-05-15T11:15:53.430 に答える
3

最近の個人的な経験から話すことができます。比較的小さなデータベースで正常に機能する古いmysqlクエリがいくつかのPHPコードにありますが、それが大きくなるにつれて、クエリはどんどん遅くなりました。

私は自分が書いた別の管理phpアプリと一緒に独自のデータベースでmysqlを実行しているfreeradiusを持っています。freeradiusテーブルは>150万行です。アプリのデータベースからfreeradiusデータベースにテーブルを結合しようとしていました。確かに150万行は多すぎると言えます。いくつかのクエリを実行すると、アプリが完全にロックされました。結局、phpアプリの一部を書き直して、別の方法で処理する必要がありました(つまり、異なるデータベースの2つのテーブルを結合しない)。また、いくつかのキーフィールドでradiusアカウンティングテーブルにインデックスを付け、いくつかのクエリを最適化しました(mysql EXPLAINステートメントはこれを支援するのに最適です)。物事は今、はるかに速くなっています。

本当に必要な場合を除いて、将来、異なるデータベースの2つのテーブルを結合することを躊躇します。

于 2011-05-13T16:03:10.940 に答える