2010-07-11 17 views
11

C'è qualche risultato in termini di prestazioni dall'interrogazione su due (o più) database sullo stesso server MySQL, rispetto a se quei database erano stati uniti in uno solo?Prestazioni di query su due database mysql sullo stesso server?

Sfondo, ho ereditato la manutenzione su un'applicazione web che divide i dati in tre diversi database che corre sullo stesso server, uno per i contenuti, una per gli utenti e le informazioni di gruppo e uno per i dati generati dall'utente. Questo è conveniente, ad esempio facilita l'impostazione delle autorizzazioni, i dati dell'utente sono piuttosto sensibili, quindi le persone che non hanno bisogno di sapere non dovrebbero accedervi. Tuttavia, una delle caratteristiche principali dell'applicazione è la fornitura di report di avanzamento per utenti o gruppi sul contenuto. Ciò significa che deve eseguire una query su due o più database per generare il report.

C'è qualche perdita di prestazioni in questo modo?

+0

Non che io sappia, no. –

+0

No, tuttavia verificare che i JOIN siano eseguiti su tipi di campi dati simili. I disallineamenti di tipo sono rifatti al volo che causano una penalità sostanziale delle prestazioni. Ovviamente questo non è limitato alle query su database incrociati, ma sperimentiamo continuamente tali discrepanze quando si lavora con database gestiti da team diversi. –

risposta

17

No. In MySQL, "database" sono essenzialmente solo cataloghi che non hanno alcun effetto sul modo di dati memorizzati o interrogati.

La query su due tabelle in database diversi equivale a interrogare due tabelle nello stesso db, da un punto di vista dell'esecuzione della query.

+1

Ho accettato questa come risposta corretta poiché risponde direttamente alla mia domanda. Eppure sento che c'è anche saggezza nella risposta di Stephen. – Leon

+0

Bene, grazie! – Stephen

3

Questo introdurrebbe un problema evidente solo se si stava tentando di utilizzare più istruzioni select per i dati in ciascun database. È preferibile utilizzare alcune chiavi esterne e quindi utilizzare una singola query di join per ottenere i dati di un utente e il suo contenuto utente associato. È possibile aggiungere prefissi ai nomi degli schemi nelle tabelle nell'istruzione select join.

esempio potrebbe essere simile a questo:

SELECT a.user, b.user_content 
    FROM database1.table1 AS a 
    LEFT JOIN database2.table2 AS b 
     ON a.user = b.user_id; 
Problemi correlati