2010-07-15 7 views
12

У меня есть веб-сайт с использованием базы данных с именем let say "site1". Я планирую разместить другой сайт на том же сервере, который также будет использовать некоторые таблицы из «site1».Эффективный эффект объединения таблиц из разных баз данных

Так что я должен использовать три разные базы данных, такие как «site1» (для первых данных для конкретного сайта), «site2» (для вторых конкретных данных сайта) и «общий» (для общих таблиц). В котором будут заключены соглашения между базовыми базами данных и сайтами site1 и site2. Или я должен помещать все таблицы в одну базу данных?

Какая практика? Как выступления различаются в каждой ситуации? Я использую MySQL. Итак, как обстоят дела для MySQL?

Спасибо заранее ...

+0

Могу ли я предположить, что dbs находятся на одном сервере? –

+0

да, они есть. И я уже пытался подключиться к таблицам из разных баз данных. оно работает. –

ответ

3

Я могу говорить с недавнего личного опыта. У меня есть несколько старых запросов mysql в некотором PHP-коде, который отлично работал с относительно небольшой базой данных, но по мере того, как он рос, запрос становился все медленнее и медленнее.

У меня есть freeradius, работающий с mysql в своей собственной базе данных, а также другое приложение php для управления, которое я написал. Таблица freeradius составляет> 1,5 миллиона строк. Я пытался объединить таблицы из базы данных моего приложения в базу данных freeradius. Могу сказать наверняка, что 1,5 миллиона строк слишком много. Запуск некоторых запросов полностью заблокировал мое приложение. Мне пришлось переписывать часть моего приложения php, чтобы делать что-то по-другому (т. Е. Не присоединяться к двум таблицам из другой базы данных). Я также проиндексировал таблицу учета радиуса в некоторых ключевых полях и оптимизировал некоторые запросы (инструкция mysql EXPLAIN замечательна, чтобы помочь с этим). Сейчас все намного быстрее.

Я определенно буду колебаться, чтобы присоединиться к двум таблицам из разных баз данных в будущем, если это действительно действительно необходимо.

+2

Вы уверены, что замедление не было из-за размера db? Скорее всего, вы видели замедление, даже если таблицы находились в одном и том же дБ. – Costa

10

С точки зрения производительности, не будет никакой разницы. Просто держите свои индексы на месте, и вы не заметите, используете ли вы одну БД или несколько БД.

Помимо производительности, есть два небольших значения, о которых я могу думать: 1. У вас не может быть внешних ключей через БД. 2. Разбиение таблиц в БД на основе их использования или на основе приложений может помочь вам легко управлять разрешениями.

+4

Мой ответ предполагает, что все БД находятся на одном сервере БД. Если вы держите их на разных серверах БД, вы начнете видеть ухудшение производительности. –

+4

Вы можете иметь внешние ключи через БД в MySQL, если они находятся на одном сервере. Но не знаю, что произойдет, если они находятся на разных серверах или в других СУБД. –

Смежные вопросы