2010-07-15 18 views
12

J'ai un site web en utilisant une base de données nommée "site1". Je prévois de mettre un autre site sur le même serveur qui utilisera aussi certaines des tables de "site1". Je devrais donc utiliser trois bases de données différentes comme "site1" (pour les données spécifiques au premier site), "site2" (pour les données spécifiques au second site) et "general" (pour les tables communes). Dans lequel il y aura des instructions de jointure entre les bases de données générales et site1 et site2. Ou devrais-je mettre toutes les tables dans une base de données?effet de performance de joindre des tables à partir de différentes bases de données

Quelle est la meilleure pratique à faire? Comment les performances diffèrent-elles dans chaque situation? J'utilise MySQL. Alors, comment est la situation en particulier pour MySQL?

Merci à l'avance ...

+0

Ai-je raison de supposer que les dbs sont sur le même serveur? –

+0

oui ils sont. Et j'ai déjà essayé de joindre des tables de différentes bases de données. Ça marche. –

Répondre

3

Je peux parler de l'expérience personnelle récente. J'ai quelques anciennes requêtes mysql dans du code PHP qui fonctionnaient correctement avec une base de données relativement petite, mais à mesure qu'elle grandissait, la requête devenait de plus en plus lente.

J'ai freeradius exécutant mysql dans sa propre base de données avec une autre application PHP de gestion que j'ai écrite. La table freeradius est> 1,5 million de lignes. J'essayais de joindre des tables de la base de données de mon application à la base de données freeradius. Je peux dire avec certitude que 1,5 million de lignes est trop. L'exécution de certaines requêtes a complètement bloqué mon application. J'ai fini par devoir réécrire des parties de mon application php pour faire les choses différemment (c'est-à-dire ne pas joindre 2 tables de bases de données différentes). J'ai également indexé la table de comptabilité de rayon sur quelques champs clés et optimisé quelques requêtes (l'instruction mysql EXPLAIN est merveilleuse pour aider avec ceci). Les choses sont beaucoup plus rapides maintenant.

Je vais certainement hésiter à rejoindre 2 tables de bases de données différentes à l'avenir, sauf si vraiment nécessaire.

+2

Vous êtes sûr que le ralentissement n'était pas dû à la taille db? Vous auriez probablement vu le ralentissement même si les tables étaient dans le même DB. – Costa

10

Du point de vue des performances, il n'y aura pas de différence. Gardez simplement vos index en place et vous ne remarquerez pas si vous utilisez DB unique ou plusieurs DB. En dehors de la performance, il y a 2 petites implications auxquelles je peux penser: 1. Vous ne pouvez pas avoir de clés étrangères sur les DB. 2. Les tables de partitionnement en base de données basées sur leur utilisation ou basées sur des applications peuvent vous aider à gérer les autorisations de manière simple.

+4

Ma réponse suppose que tous les DB se trouvent sur le même serveur de base de données. Si vous les conservez sur différents serveurs de base de données, vous commencerez à voir une dégradation des performances. –

+4

Vous pouvez avoir des clés étrangères sur des bases de données MySQL, si elles se trouvent sur le même serveur. Mais ne savez pas ce qui se passe s'ils sont sur des serveurs différents ou dans d'autres SGBD. –