2010-07-15 19 views
12

Ich habe eine Website mit einer Datenbank namens sagen wir "site1". Ich plane, eine andere Seite auf den gleichen Server zu legen, der auch einige der Tabellen von "site1" benutzt.Leistungseffekt der Verknüpfung von Tabellen aus verschiedenen Datenbanken

Also sollte ich drei verschiedene Datenbanken verwenden, wie "site1" (für erste Site-spezifische Daten), "site2" (für zweite Site-spezifische Daten) und "general" (für allgemeine Tabellen). In dem es werden Join-Anweisungen zwischen Datenbanken General und Site1 und Site2. Oder sollte ich alle Tabellen in einer Datenbank ablegen?

Welches ist die beste Vorgehensweise? Wie unterscheiden sich die Leistungen in jeder Situation? Ich benutze MySQL. Wie sieht es speziell mit MySQL aus?

Vielen Dank im Voraus ...

+0

Bin ich richtig, die dbs sind beide auf dem gleichen Server? –

+0

ja, das sind sie. Und ich habe bereits versucht, Tabellen aus verschiedenen Datenbanken zu verbinden. Es klappt. –

Antwort

3

Ich kann aus jüngsten persönlichen Erfahrungen sprechen. Ich habe einige alte mysql-Abfragen in einigen PHP-Code, die mit einer relativ kleinen Datenbank funktionierte, aber als es wuchs, wurde die Abfrage immer langsamer.

Ich habe Freeradius mysql in einer eigenen Datenbank zusammen mit einer anderen Management-PHP-App, die ich geschrieben habe. Die Freeradius-Tabelle ist> 1,5 Millionen Zeilen. Ich habe versucht, Tabellen aus der Datenbank meiner App an die Freeradius-Datenbank anzuschließen. Ich kann sicher sagen, 1,5 Millionen Zeilen sind zu viel. Das Ausführen einiger Abfragen hat meine App komplett gesperrt. Ich musste Teile meiner php-App neu schreiben, um Dinge anders zu machen (dh nicht 2 Tabellen aus einer anderen Datenbank zu verbinden). Ich habe auch die Radius-Accounting-Tabelle für einige Schlüsselfelder indiziert und einige Abfragen optimiert (mysql EXPLAIN-Anweisung ist wunderbar, um damit zu helfen). Die Dinge sind jetzt viel schneller.

Ich werde definitiv zögern, 2 Tabellen aus verschiedenen Datenbanken in der Zukunft zu verbinden, es sei denn wirklich wirklich notwendig.

+2

Sie sicher, dass die Verlangsamung nicht wegen der Größe der DB war? Sie hätten die Verlangsamung wahrscheinlich auch dann gesehen, wenn sich die Tabellen in derselben Datenbank befanden. – Costa

10

Aus der Sicht der Leistung wird es keinen Unterschied geben. Behalten Sie einfach Ihre Indizes bei und Sie werden nicht bemerken, ob Sie einzelne DB oder mehrere DBs verwenden.

Abgesehen von der Leistung gibt es zwei kleine Implikationen, die ich mir vorstellen kann: 1. Sie können keine Fremdschlüssel über DBs hinweg haben. 2. Partitionstabellen in der Datenbank basierend auf ihrer Verwendung oder basierend auf Anwendungen können Ihnen helfen, Berechtigungen auf einfache Weise zu verwalten.

+4

Meine Antwort geht davon aus, dass alle DBs auf dem gleichen DB-Server sind. Wenn Sie sie auf verschiedenen DB-Servern aufbewahren, werden Sie feststellen, dass die Leistung abnimmt. –

+4

Sie können Fremdschlüssel über DBs in MySQL haben, wenn sie sich auf demselben Server befinden. Aber ich weiß nicht, was passiert, wenn sie sich auf verschiedenen Servern oder in anderen DBMS befinden. –

Verwandte Themen