2010-10-15 7 views
0

1) J'ai un employé de table (emp_id, emp_name, emp_salary); Je veux trouver top 2 employés ayant le salaire maximum sans utiliser la limiteexécuter une seule requête sur plusieurs bases de données

2) comment je fais exécuter une requête pour qu'il prenne les enregistrements de databses sur deux serveurs base de données de MySQL cela doit être fait dans la requête unique mysql

merci d'avance pour toute aide ou des réponses

+0

ressemble à ça va répondre à ma première question. Bloc FAcebook .. besoin d'atteindre la maison pour lire que .. :(http://www.facebook.com/note.php?note_id=206034210932 – Parag

Répondre

1

Une requête unique ne peut pas parler à deux serveurs de bases de données à la fois. Ce n'est juste pas autorisé. Mais vous pouvez lier les deux serveurs en utilisant une table FEDERATED. Cela fait apparaître la table "distante" comme si elle était vraiment stockée localement.

Toutefois, vous êtes toujours obligé d'utiliser une requête union, à moins que les deux tables ne puissent être jointes d'une manière ou d'une autre.

SELECT blah,blah,blah 
FROM localtable 

UNION 

SELECT blah,blah,blah 
FROM federatedtable 
0

Alors, quel est exactement le problème avec le LIMIT?

select * 
    from (select * 
      from db1.employee 
     order by salary desc limit 2 
     union 
     select * 
      from db2.employee 
     order by salary desc limit 2 
) emp 
order by emp.salary desc limit 2 

si les employés de BD1 et db2 sont certainement différents ou vous ne voulez pas supprimer les doublons changer pour UNION ALL

+0

http://forge.mysql.com/wiki/Top10SQLPerformanceTips dit LIMIT m Vous pouvez apprendre à l'améliorer et en savoir plus sur la pagination efficace avec MySQL – Parag

+0

Cette astuce de performance fait référence aux cas où vous utilisez LIMIT avec 'm' étant très grand, dans notre cas' m' est 0 (omis) et cela donnera un boost de performance à la place, surtout si vous avez un index sur le champ 'salary'. –

Questions connexes