2010-07-15 39 views
12

我有一個網站使用名爲讓我們說「site1」的數據庫。我打算在同一臺服務器上放置另一個站點,該站點也將使用「site1」中的一些表格。因此,我應該使用三個不同的數據庫,如「site1」(用於第一個站點特定數據),「site2」(用於第二個站點特定數據)和「general」(用於常用表格)。其中將在數據庫general和site1和site2之間存在聯接語句。或者我應該把所有表放在一個數據庫中?從不同數據庫連接表的性能影響

哪個是最佳做法? 各種情況下表演的表現有何不同? 我正在使用MySQL。那麼對於MySQL來說情況如何呢?

在此先感謝...

+0

我是否有權假定dbs都在同一臺服務器上? – 2010-07-15 20:11:00

+0

是的,他們是。而且我已經嘗試過從不同數據庫連接表格。有用。 – 2010-07-15 20:16:28

回答

3

我可以從最近的個人經驗說話。我在一些PHP代碼中使用了一些舊的mysql查詢,這些查詢可以在相對較小的數據庫中正常工作,但隨着查詢的增長,查詢變得越來越慢。

我有freeradius在自己的數據庫中運行mysql,以及我編寫的另一個管理php應用程序。 freeradius表格大於150萬行。我試圖將我的應用程序數據庫中的表連接到freeradius數據庫。我可以肯定地說150萬行太多了。運行一些查詢完全鎖定了我的應用程序。我最終不得不重寫我的php應用程序的一部分,以不同的方式做事情(即不加入來自不同數據庫的2個表)。我還將一些關鍵字段的半徑計算表編入索引,並優化了一些查詢(mysql EXPLAIN語句對此很有幫助)。事情現在要快得多。

除非真的有必要,否則我一定會猶豫,在將來加入來自不同數據庫的2張表。

+2

你確定減速不是因爲數據庫大小?即使表格在同一個數據庫中,您也很可能會看到放緩。 – Costa 2013-06-02 23:08:32

10

從性能的角度來看,不會有任何區別。只要保持索引就位,並且不會注意到您使用的是單個數據庫還是多個數據庫。

除了性能,我還能想到兩個小的影響: 1.跨數據庫不能有外鍵。 2.根據數據庫的使用情況或基於應用程序對數據庫中的表進行分區可幫助您輕鬆管理權限。

+4

我的答案假定所有的數據庫都在同一個數據庫服務器上。如果您將它們放在不同的數據庫服務器上,您將開始看到性能下降。 – 2013-05-15 11:19:06

+4

如果MySQL位於同一臺服務器上,則可以在MySQL中的數據庫中擁有外鍵。但不知道如果他們在不同的服務器或其他DBMS中會發生什麼情況。 – 2013-06-19 15:38:36