sql >> Database >  >> RDS >> Mysql

MySQL-query's zijn snel wanneer ze rechtstreeks worden uitgevoerd, maar erg traag wanneer ze worden uitgevoerd als opgeslagen proces

Ik had hetzelfde probleem. Na een tijdje onderzoek te hebben gedaan, ontdekte ik dat het probleem het sorteerprobleem was terwijl MySQL tekst aan het vergelijken was.

TL;DR: de tabel is in één sortering gemaakt, terwijl MySQL "dacht" dat de variabele in een andere sortering stond. Daarom kan MySQL de index die bedoeld is voor de zoekopdracht niet gebruiken.

In mijn geval is de tabel gemaakt met (latin1 , latin1_swedish_ci ) sortering. Om MySQL de index te laten gebruiken, moest ik de where . wijzigen clausule in de opgeslagen procedure van

    UPDATE ... WHERE mycolumn = myvariable

naar

    UPDATE ... WHERE mycolumn = 
        convert(myvariable using latin1) collate latin1_swedish_ci

Na de wijziging zag de opgeslagen procedure er ongeveer zo uit:

    CREATE PROCEDURE foo.'bar'()
    BEGIN
        UPDATE mytable SET mycolumn1 = variable1
        WHERE mycolumn2 = 
            convert(variable2 using latin1) collate latin1_swedish_ci
    END;

waar (latin1 , latin1_swedish_ci ) is dezelfde sortering als mijn tableA is gemaakt met.

Om te controleren of MySQL de index gebruikt of niet, kunt u de opgeslagen procedure wijzigen om een ​​explain uit te voeren verklaring als volgt:

    CREATE PROCEDURE foo.'bar'()
    BEGIN
        EXPLAIN SELECT * FROM table WHERE mycolumn2 = variable2
    END;

In mijn geval, de explain resultaat toonde aan dat er geen index werd gebruikt tijdens de uitvoering van de zoekopdracht.

Houd er rekening mee dat MySQL de index kan gebruiken wanneer u de query alleen uitvoert, maar de index nog steeds niet voor dezelfde query binnen een opgeslagen procedure zal gebruiken, wat misschien omdat MySQL de variabele op de een of andere manier in een andere sortering ziet.

Meer informatie over het sorteerprobleem vindt u hier:http://lowleveldesign.wordpress.com/2013/07/19/diagnosing-collation-issue-mysql-stored-procedure/ Back-uplink:http ://www.codeproject.com/Articles/623272/Diagnosing-a-collation-issue-in-a-MySQL-stored-pro



  1. AngularJS verbinden met mysql met behulp van mijn PHP-service?

  2. Uitvoeringsplan voor SQL Server - wat is het en hoe helpt het bij prestatieproblemen?

  3. Postgresql verbinden met sqlalchemy

  4. maak een tabel met sequence.nextval in oracle