Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

LEFT JOIN Significativement plus rapide que INNER JOIN

La jointure gauche semble être plus rapide car SQL est obligé de faire d'abord la plus petite sélection, puis de se joindre à cet ensemble d'enregistrements plus petit. Pour une raison quelconque, l'optimiseur ne veut pas le faire naturellement.

3 façons de forcer les jointures à se produire dans le bon ordre :

  1. Sélectionnez le premier sous-ensemble de données dans une table temporaire (ou une variable de table), puis joignez-la
  2. Utilisez des jointures gauches (et rappelez-vous que cela peut renvoyer des données différentes, car il s'agit d'une jointure gauche et non d'une jointure interne)
  3. utilisez le mot-clé FORCE ORDER. Notez que si les tailles de table ou les schémas changent, le plan de requête peut ne pas être correct (voir https://dba.stackexchange.com/questions/45388/forcing-join-order )