Risposte:
In generale, più di tutto ciò che hai ridurrà le prestazioni. Tuttavia, 200 sembra un numero abbastanza piccolo. 2.000 potrebbero essere un vero successo prestazionale e sicuramente 20.000. In generale, tuttavia, dovresti ridurre il numero di tabelle poiché MySQL può gestire un numero molto elevato di righe nella tabella.
Il numero di tabelle non conta tanto quanto:
Avere tabelle in eccesso significa memoria e spazio sul disco rigido che potrebbero essere recuperati e utilizzati per altre cose. Tieni presente che denormalizzare le tue tabelle aumenta il rischio di dati errati perché ti stai sbarazzando dell'integrità referenziale.
In generale 200 tabelle non dovrebbero essere un problema ma dipendono da una serie di cose.
Server MySQL dedicato vs Server condiviso con altri software, 128 Mb vs 128 GB di RAM ecc., Tabelle di piccole dimensioni con pochi record rispetto a tabelle con BLOB e milioni di righe.
MySQL ha diverse impostazioni e più motori, ciascuno dei quali influisce sulle prestazioni delle tabelle in modi diversi.
MyISAM ha normalmente tre file per tabella .frm, .MYD, .MYI
INNODB in modalità normale ha .frm con tutti i dati memorizzati nel file centrale
INNODB in un file per modalità tabella ha .frm, .idb
table_open_cache è il numero di tabelle che possono essere aperte contemporaneamente (impostazione predefinita 64). Potrebbe essere necessario che sia maggiore del numero di tabelle nello schema in quanto è correlato al numero di connessioni che eseguono query sul DB. 100 connessioni uniscono 3 tabelle potrebbe significare che hai 300 tabelle memorizzate nella cache più eventuali tabelle temporanee. Uno schema o connessioni generalmente più complessi, maggiore è il numero.
open-files-limit Tendo a impostare questo su 4x table_open_cache che dovrebbe essere generoso piuttosto che preoccuparsi di elaborare un valore esatto.
Il limite di gestione dei file del sistema operativo per l'utente mysql può anche essere un problema (su Linux il valore predefinito può essere spesso 1024, ulimit -n per mostrare i limiti dell'utente) ciò può causare un problema con un numero elevato di tabelle quando è inferiore al numero mysql richiede. Questo dovrebbe essere almeno uguale al limite di file aperti.
Come con qualsiasi database, ci sono centinaia di parametri di ottimizzazione che è possibile regolare per ottimizzare il database per il proprio schema specifico. MySQL è peggio per questo rispetto alla maggior parte poiché è possibile collegare motori aggiuntivi se si desidera ad esempio un motore cluster NDB.
http://dev.mysql.com/doc/refman/5.1/en/table-cache.html
Spero che sia d'aiuto
Per ogni indice di una tabella MySQL ha il suo indice. L'indice richiede memoria per essere conservato e utilizzato e esiste un limite globale per gli indici. Quando ci sono molte tabelle, gli indici non possono essere tutti nella RAM, quindi vanno sul disco, il che influisce direttamente sulle prestazioni. Prova ad aumentare questo in my.cnf:: key_buffer_size=256Mquesta è la quantità di RAM messa da parte per contenere le informazioni sull'indice.
Può esso? Sicuro. Ma quanto dipende molto dalla tua app e dai suoi schemi di accesso, e se stai usando myisam o innodb e se innodb è in modalità file per tabella o meno e la dimensione dei registri di innodb. Dovrai fornirci maggiori dettagli.
No, non credo che il numero di tabelle sarà il collo di bottiglia delle prestazioni nel tuo sistema. Dopotutto, sono solo file sul tuo filesystem. Non c'è niente di insolito nell'avere centinaia di tabelle in un database.
Molto più probabile è che le tue query non siano adeguatamente ottimizzate. Consiglierei di accendere log-slow-queriese log-queries-not-using-indexes. Quando si identificano query lente, utilizzare l' explainopzione per visualizzare il piano di query per queste query per identificare i luoghi in cui mancano gli indici.
Vedi http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html per maggiori dettagli.