sql >> Database >  >> RDS >> Mysql

Waarom blijft deze MySQL-query hangen?

Omdat iemand een van de tafels of een enkele rij heeft vergrendeld. Dit kan bijvoorbeeld gebeuren als je automatische vastlegging hebt uitgeschakeld (zodat je je wijzigingen kunt terugdraaien) in een sessie en bent vergeten daar vast te leggen.

Dit document zou kunnen helpen.

[EDIT] Nadat je de tabeldefinities hebt gepost, kun je zien dat de typen van de twee join-kolommen verschillend zijn. Nu is de vraag:welk type wordt omhoog/omlaag gegoten wanneer u de query uitvoert? In jouw geval is het misschien beter om het type PAYMENT_TRANSACTION_LOG_ID te casten naar varchar , vooral als je een index hebt op TRANSACTION_ID (die u voor deze zoekopdracht moet maken).

Op die manier kunnen een paar rijen (of zelfs een enkele) uit de tabel tbl_order_head wordt geselecteerd en vervolgens wordt er snel gezocht in de tabel tbl_orders_log . Zonder dit laadt de database alle records uit de logtabel en controleert elk record op een overeenkomst in de gevonden volgorde-headers (plus casten van elke ID naar het type in de header, enz.).



  1. Hoe maak je een weergave in SQL

  2. MySQL-selectiequery met variabele kolomnaam

  3. PostgreSQL-index maken

  4. Hoe de som van twee kolommen uit twee verschillende tabellen berekenen zonder waar-clausule?