2012-09-11 18 views
2

長話短說 - 我正在處理一個大型數據庫,其中基本用戶詳細信息(用戶標識(索引),用戶名,密碼,父用戶,狀態)存儲在一個數據庫和擴展用戶詳細信息(相同的用戶標識(索引),全名,地址等)存儲在另一臺服務器上的另一個數據庫中。MySQL聯合存儲引擎與複製(性能)

我需要做一個查詢,在這裏我選擇由特定用戶擁有的所有用戶(通過基本用戶詳細信息數據庫中的父用戶字段),按其全名(來自擴展用戶詳細信息字段)排序,一個時間(對於任何一個用戶來說有成千上萬個,也許有幾萬個)。

據我所知,有三種可能的解決方案;

  1. 無JOIN - 在一個查詢中獲取所有用戶ID,並根據這些ID運行第二個查詢。這很好,除非用戶ID的數量可能會變得太高以至於超過最大查詢長度,或者效率非常低。

  2. 複製的基本用戶信息的數據庫表到服務器擴展的細節,所以我可以做一個JOIN

  3. 使用聯合存儲引擎表來實現相同的結果#2

看起來3是最好的選擇,但我一直能夠找到關於性能的很少的信息,並且我還發現一個註釋要在生產數據庫中使用它。

對於什麼是最佳實施方案,我將不勝感激。

謝謝!

回答

2

談到性能或限制,Federated Engine有很多limitations。它不支持交易,執行批量插入時FEDERATED表上的性能比其他表類型等要慢。

Replication和聯合引擎並不意味着要做同樣的事情。首先,你是否都嘗試過?

2

FEDERATED表是一個很好的功能..但他們不支持索引,這會顯着減慢你的應用程序。

if(!)you do read only from the users database on the remote server。 複製會更有效,也更快。