2010-07-11 14 views
11

¿Hay algún problema de rendimiento al consultar más de dos (o más) bases de datos en el mismo servidor MySQL, en comparación con si esas bases de datos se hubieran fusionado en una sola?¿Desempeño de consultas en dos bases de datos mysql en el mismo servidor?

Antecedentes, he heredado el mantenimiento de una aplicación web que divide sus datos en tres bases de datos diferentes que se ejecutan en el mismo servidor, uno para contenido, uno para usuarios y grupos y uno para usuarios. Esto es conveniente, por ejemplo, facilita la configuración de permisos, los datos del usuario son algo sensibles, por lo que las personas que no necesitan saber no deberían tener acceso a ellos. Sin embargo, una de las características principales de la aplicación es proporcionar informes de progreso para usuarios o grupos sobre el contenido. Lo que significa que tiene que consultar en dos o más de las bases de datos para generar el informe.

¿Hay alguna pérdida de rendimiento al hacerlo de esa manera?

+0

No es que yo sepa, no. –

+0

No, sin embargo, verifique que las UNIONES se realicen en tipos de campos de datos similares. Los desajustes de tipos se modifican sobre la marcha, lo que causa una penalización sustancial en el rendimiento. Obviamente, esto no se limita a las consultas cruzadas de bases de datos, sino que experimentamos continuamente esas discrepancias cuando trabajamos con bases de datos administradas por diferentes equipos. –

Respuesta

17

No. En MySQL, "bases de datos" son esencialmente sólo catálogos que no tienen ningún efecto en la forma de datos se almacenan o consultados.

Consultar dos tablas en bases de datos diferentes es lo mismo que consultar dos tablas en el mismo db, desde el punto de vista de ejecución de una consulta.

+1

He aceptado esto como la respuesta correcta, ya que responde directamente a mi pregunta. Sin embargo, creo que también hay sabiduría en la respuesta de Stephen. – Leon

+0

¡Bien, gracias! – Stephen

3

Esto solo presentaría un problema notable si estuviera tratando de usar múltiples declaraciones de selección para los datos en cada base de datos. Sería mejor usar algunas claves externas, y luego usar una consulta de combinación única para obtener los datos de un usuario y su contenido de usuario asociado. Puede prefijar nombres de esquema en sus tablas en la instrucción de selección de combinación.

ejemplo sería similar a esto:

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