2010-07-15 7 views
0

je joindre deux tables, il y a des centaines d'enregistrements dans la table un et il y a des centaines de milliers de dossiers dans le tableau bI les deux rejoint intérieure et jointure gauche, mais il est deux requête slow.My est:La jointure de table est si lente!

SELECT 
    ch.id, 
    ch.client_client_id, 
    ch.duration, 
    ch.start, 
    ch.isread, 
    ch.prefix, 
    ucr.ucr_add_factor, 
    ucr.ucr_period, 
    ucr.ucr_cr_prefix 
FROM 
    call_history AS ch 
    LEFT JOIN tbl_usr_call_rates AS ucr 
     ON (
      ch.prefix=ucr.ucr_cr_prefix 
      AND ch.client_client_id=ucr.ucr_callshop_id 
     ) 
WHERE 
    ch.isread='0' 

Comment puis-je augmenter les performances

Merci pour l'avance ...

+0

Avez-vous des index sur les tables pour les colonnes sur lesquelles vous les joignez? – Kangkan

+3

Les jeunes n'ont aujourd'hui aucun concept d'histoire. Je me souviens quand une réunion signifiait que vous deviez aller à deux classeurs séparés et assortir des morceaux de papier. Pourquoi, vous avez été chanceux si vous pouviez faire vos jointures dans une semaine. –

+0

oui j'ai les index nécessaires –

Répondre

2

vérifiez les index utilisés. Vous pouvez voir lesquels sont utilisés par appel

EXPLAIN SELECT 
ch.id, ch.client_client_id, ch.duration, ch.start, ch.isread, ch.prefix, 
ucr.ucr_add_factor, ucr.ucr_period, ucr.ucr_cr_prefix 
FROM call_history AS ch 
LEFT JOIN tbl_usr_call_rates AS ucr 
ON (ch.prefix=ucr.ucr_cr_prefix AND ch.client_client_id=ucr.ucr_callshop_id) 
WHERE ch.isread='0' 
+0

j'ai déjà mis les index nécessaires –

+1

pourrait yo provive le résultat si EXPLAIN ...? – Lars

+0

dans la sortie explain la colonne "extra" a "using index" –

1

les suspects habituels:

cocher les indices vérifier que les jointures ne nécessitent pas plus d'un Fiel d ou vous aurez un produit cartésien

il y en a beaucoup d'autres mais ce sont les principaux.

jim

0

Je suppose que vous avez des index sur ces champs?

call_history.prefix 
tbl_usr_call_rates.ucr_cr_prefix 
call_history.client_client_id 
tbl_usr_call_rates.ucr_callshop_id 
call_history.isread 
+0

oui ces champs ont des index sauf 'isread' –

0

Vous pouvez essayer en ajoutant un index sur les colonnes auxquelles vous vous joignez.

0

Filtrez d'abord via la clause WHERE avant de vous joindre, de cette façon, vous joignez le résultat déjà filtré au lieu de les joindre tous, puis de filtrer le grand résultat.

+0

Je serais surpris si l'optimiseur ne s'occupe pas de ça pour vous. – spender

Questions connexes