sql >> Database >  >> RDS >> Mysql

MySQL:geneste set is traag?

IME, MySQL is niet goed in het optimaliseren van subquery's - vooral het lijkt geen push-predikaten te beheren.

Ik ben een beetje in de war over wat de zoekopdracht eigenlijk moet retourneren - met name de 'sub-ouder'

U zou enige verbetering krijgen door left_id en right_id in een enkele index te plaatsen.

Hoewel je ook enige verbetering zult krijgen door de query uit te rollen in een opgeslagen procedure, aangezien het lijkt alsof je bijna de hele dataset elke keer doorloopt, zou een betere oplossing zijn om de boomdiepte te denormaliseren en op te slaan als een attribuut voor elk knooppunt. Je lijkt het inderdaad minstens twee keer te doorlopen in de buitenste vraag alleen.

Ik merk echter dat aan het einde van de query:

HAVING depth > 0
   AND depth <= 1

Wat zeker hetzelfde is als

HAVING depth=1

Wat vervolgens een heel andere manier biedt om de zoekopdracht te optimaliseren (begin met het ophalen van alle knooppunten waar rechts=links+1 om de knooppunten zonder kinderen te vinden en werk verder om de categorie-ID te controleren).




  1. Spring Data Join met specificaties

  2. TOP 5 MySQL-verwijdersyntaxis met tips voor T-SQL-ontwikkelaars

  3. Controleer op mislukte e-mail in SQL Server (T-SQL)

  4. NSIS Compile - mysql wordt niet herkend als bruikbaar programma - Waarom mislukt de NsExec::ExecToLog-instructie?