2011-07-29 89 views
3

我有一個關於分割數據庫的問題。這是有問題的查詢:分割MySQL數據庫

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 

問題是,現在數據庫的錢和產品將在不同的服務器。解決辦法是什麼?我需要兩個查詢嗎?我有點失落。

謝謝!

回答

4

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

如果我理解你的問題正確,你想有一個查詢2個數據庫之間的連接表,並且數據庫將位於不同的服務器上。

假設您在「錢」服務器上運行查詢,您將在錢類服務器上創建聯合表,指向「產品」服務器。這樣,你的查詢繼續工作,MySQL神奇地管理他們在物理上獨立的服務器上的事實。

性能調優可能存在問題,但這是保持查詢正常工作的最簡單方法。例如,您可以在名爲「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://[email protected]_server:9306/products/link'; 

然後,您可以在不更改任何內容的情況下運行上述查詢。

+0

非常感謝您的回答,但表格已經創建好了,這是一個包含數百個表格的大系統,我沒有這個選項。 – luqita

+0

您能否給我舉一個你如何做的例子?我是否必須將當前表更改爲聯合?儘管這個任務很複雜,但我仍然對MySQL有些許不滿。謝謝! – luqita

+0

當您移動到新服務器時,您將不得不遷移數據,以便您可以事先實施聯合表。 –