3

分割データベースについて質問があります。これが問題のクエリです。

SELECT COUNT(*) FROM monies.link_monies_new lcn '
         . 'INNER JOIN products.link l ON lcn.link_id = l.link_id '
         . 'INNER JOIN products.products_format af ON l.product_format_id = af.product_format_id '
         . 'INNER JOIN products.products_categories ac ON af.product_category_id = ac.product_category_id '
         . 'WHERE lcn.click_time BETWEEN FROM_UNIXTIME(1311721200) AND FROM_UNIXTIME(1311807600) '
         . 'AND ac.product_category_id = 1

問題は、データベースのお金と製品が別のサーバーにあることです。解決策は何ですか?2 つのクエリが必要ですか? 私は少し迷っています。

ありがとう!

4

1 に答える 1

4

http://dev.mysql.com/doc/refman/5.0/en/federated-use.html

私があなたの質問を正しく理解していれば、2 つのデータベース間でテーブルを結合するクエリが必要であり、データベースは別々のサーバーに配置されます。

「monies」サーバーでクエリを実行すると仮定すると、monies サーバー上に「products」サーバーを指す連合テーブルを作成します。そうすれば、クエリは引き続き機能し、MySQL はそれらが物理的に別のサーバー上にあるという事実を魔法のように管理します。

パフォーマンスの調整には問題が生じる可能性がありますが、クエリを現在の状態で機能させ続ける最も簡単な方法です。

たとえば、「monies」サーバーに「products」というローカル データベースを作成できます。製品内で、「リンク」テーブルを作成します。

CREATE TABLE link (
    link_id     INT(20) NOT NULL AUTO_INCREMENT,
    ....<<other columns from the link table>>
    PRIMARY KEY  (link_id)
)
ENGINE=FEDERATED

CONNECTION='mysql://fed_user@products_server:9306/products/link';

その後、何も変更せずに上記のクエリを実行できます。

于 2011-07-29T13:06:26.407 に答える