Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:molte tabelle o molti database?

Non dovrebbero esserci differenze di prestazioni significative tra più tabelle in un unico database rispetto a più tabelle in database separati.

In MySQL, i database (l'SQL standard usa il termine "schema" per questo) servono principalmente come spazio dei nomi per le tabelle. Un database ha solo pochi attributi, ad es. il set di caratteri e le regole di confronto predefiniti. E quell'uso di GRANT rende conveniente controllare i privilegi di accesso per database, ma ciò non ha nulla a che fare con le prestazioni.

Puoi accedere alle tabelle in qualsiasi database da un'unica connessione (a condizione che siano gestite dalla stessa istanza di MySQL Server). Devi solo qualificare il nome del tavolo:

SELECT * FROM database17.accounts_table;

Questa è puramente una differenza sintattica. Non dovrebbe avere alcun effetto sulle prestazioni.

Per quanto riguarda l'archiviazione, non è possibile organizzare le tabelle in un file per database come ipotizza @Chris. Con il motore di archiviazione MyISAM, hai sempre un file per tabella. Con il motore di archiviazione InnoDB, hai un unico set di file di archiviazione che amalgama tutte le tabelle, oppure hai un file per tabella (questo è configurato per l'intero server MySQL, non per database). In entrambi i casi, non vi è alcun vantaggio o svantaggio in termini di prestazioni nella creazione delle tabelle in un singolo database rispetto a molti database.

Non ci sono molti parametri di configurazione MySQL che funzionano per database. La maggior parte dei parametri che influiscono sulle prestazioni del server sono nell'ambito dell'intero server.

Per quanto riguarda i backup, puoi specificare un sottoinsieme di tabelle come argomenti per mysqldump comando. Potrebbe essere più conveniente eseguire il backup di insiemi logici di tabelle per database, senza dover nominare tutte le tabelle sulla riga di comando. Ma non dovrebbe fare alcuna differenza in termini di prestazioni, solo comodità per te quando inserisci il comando di backup.