sql >> Database >  >> RDS >> Mysql

Heeft de volgorde van tabellen in rechte joins, zonder hintrichtlijnen, invloed op de prestaties?

Antwoord op uw vraag - Ja, de volgorde van de tafel maakt verschil in join.

U kunt de optimizer ook op de hoogte stellen van het uitvoeringsplan.

De ORDERED hint zorgt ervoor dat Oracle tabellen samenvoegt in de volgorde waarin ze voorkomen in de FROM-component.

Deze instructie voegt bijvoorbeeld tabel TAB1 samen met tabel TAB2 en voegt vervolgens het resultaat toe aan tabel TAB3:

 SELECT /*+ ORDERED */ TAB1.COL1, TAB2.COL2, TAB3.COL3
     FROM TAB1, TAB2, TAB3
    WHERE TAB1.COL1 = TAB2.COL1
         AND TAB2.COL1 = TAB3.COL1;

Als u de hint ORDERED weglaat uit een SQL-instructie die een join uitvoert, kiest de optimizer de volgorde waarin de tabellen worden samengevoegd. U kunt de hint ORDERED gebruiken om een ​​join-volgorde op te geven als u iets weet over het aantal geselecteerde rijen uit elke tabel dat de optimizer niet weet. Met dergelijke informatie kunt u een binnen- en buitentabel kiezen die beter is dan de optimizer zou kunnen.

Als u de tabellen analyseert, selecteert de optimizer meestal een efficiënt sterrenplan. U kunt ook hints gebruiken om het plan te verbeteren. De meest nauwkeurige methode is om de tabellen in de FROM-component te ordenen in de volgorde van de sleutels in de index, met de grote tabel als laatste. Gebruik dan de volgende hints:

/*+ ORDERED USE_NL(FACTS) INDEX(FACTS FACT_CONCAT) */


  1. MySQL:opeenvolgende dubbele waarden verwijderen

  2. Parallellisme komt naar VACUUM

  3. MySQL *.sql-bestanden uitvoeren in PHP

  4. Gebruik gecorreleerde subquery over meerdere kolommen