[Alleen PaaS]{class="badge informative" title="Is alleen van toepassing op Adobe Commerce op Cloud-projecten (door Adobe beheerde PaaS-infrastructuur) en op projecten in het veld."}

SQL-query's optimaliseren

Met SQL Report Builder kunt u query's uitvoeren en wijzigen wanneer u dat wilt. Dit vermogen is nuttig als u een vraag onmiddellijk moet bijwerken, in plaats van het wachten op een updatecyclus om te beëindigen alvorens een kolom of een rapport te bevestigen.

Alvorens een vraag wordt uitgevoerd, Commerce Intelligence schat zijn kosten ​. Kosten overweegt de tijdsduur en het aantal middelen die worden vereist om een vraag uit te voeren. Als die kosten te hoog worden geacht of als het aantal geretourneerde rijen de Commerce Intelligence -limieten overschrijdt, mislukt de query. Voor het vragen van uw ​ Data Warehouse ​, die u verzekert schrijft de meest gestroomlijnde vragen mogelijk, adviseert Adobe het volgende.

Alle kolommen selecteren of SELECT gebruiken

Het selecteren van alle kolommen maakt niet voor een geschikte, gemakkelijk uitgevoerde vraag. Het kan veel tijd duren om query's met SELECT * uit te voeren, vooral als uw tabel veel kolommen bevat.

Daarom raadt Adobe u aan SELECT * niet zoveel mogelijk te gebruiken en alleen de kolommen op te nemen die u nodig hebt:

In plaats van dit…
probeer dit!
SQL vraag gebruikend UITGEZOCHTE asterisk
SQL vraag die specifieke kolommen selecteert

Volledige buitenverbindingen gebruiken

Buiten sluit zich aan selecteren de volledige twee lijsten die worden aangesloten bij, die de computerkosten van de vraag verhogen. Dit betekent dat het langer duurt om de query uit te voeren en dat het waarschijnlijker is dat de query mislukt, omdat het langer kan duren dan de uitvoeringslimiet om de resultaten te retourneren.

In plaats van dit type verbinding te gebruiken, denk na gebruikend een binnen of linkerverbinding. De resultaten worden alleen geretourneerd als er een kolomovereenkomst is tussen tabellen (order_id bestaat bijvoorbeeld zowel in een standaard customers - als orders -tabel). Linkerverbindingen retourneren alle resultaten van de linker (eerste) tabel samen met de overeenkomende resultaten in de rechter (tweede) tabel.

Kijk hoe u een FULL OUTER JOIN vraag kunt herschrijven:

In plaats van dit…
probeer dit!
SQL vraag met volledige buitenste toetreedt
SQL vraag met geoptimaliseerde toetreedt

Deze vragen zijn identiek op elke manier behalve het type van VERBINDING zij gebruiken.

Meerdere verbindingen gebruiken

Terwijl u veelvoudige verbindingen in uw vraag kunt omvatten, herinner dat het de kosten van de vraag kan drijven omhoog. Om te voorkomen dat de kostendrempel wordt overschreden, raadt Adobe aan waar mogelijk meerdere verbindingen te vermijden.

Filters gebruiken

Gebruik filters waar mogelijk. Met de clausules WHERE en HAVING filtert u de resultaten en geeft u alleen de gegevens die u echt wilt.

Filters gebruiken in JOIN-clausules

Als u een filter gebruikt wanneer het uitvoeren van een verbinding, ben zeker om het op beide lijsten in toe te passen zich. Zelfs als het overtollig is, drukt dit de computerkosten van de vraag en vermindert de uitvoeringstijd.

In plaats van dit…
probeer dit!
SQL vraag met WAAR de componentenfilter
SQL vraag met ON componentenfilter

Operatoren gebruiken

Als u query's schrijft, kunt u overwegen de 'minst dure' operatoren te gebruiken. Elke vraag heeft computerkosten, die door de functies, de exploitanten, en de filters worden bepaald die omhoog de vraag maken. Sommige operatoren hebben minder rekenkracht nodig, waardoor ze minder kostbaar zijn dan andere operatoren.

Vergelijkingsoperatoren (>, <, =, enzovoort) zijn het goedkoopst, gevolgd door ​ LIKE. VERGELIJKBAAR MET en POSIX exploitanten ​ die de duurste exploitanten zijn.

BESTAANDE versus

Het gebruik van EXISTS versus IN is afhankelijk van het type resultaten dat u wilt retourneren. Als u slechts in één waarde geïnteresseerd bent, gebruikt u de component EXISTS in plaats van IN . IN wordt gebruikt met lijsten met door komma's gescheiden waarden, waardoor de rekenkosten van de query stijgen.

Wanneer IN query's worden uitgevoerd, moet het systeem eerst de subquery (de IN instructie) verwerken en vervolgens de volledige query op basis van de relatie die in de IN instructie is opgegeven. De query EXISTS is veel efficiënter omdat de query niet meerdere keren hoeft te worden uitgevoerd. Er wordt een waarde true/false geretourneerd tijdens het controleren van de relatie die in de query is opgegeven.

Om het simpelweg te zeggen: het systeem hoeft niet zo veel te verwerken wanneer het gebruiken van EXISTS.

In plaats van dit…
probeer dit!
SQL vraag die LINKS VERBINDT MET ONGELDIGE controle
SQL vraag gebruikend EXISTS clausule

ORDE GEBRUIKEN DOOR

De functie ORDER BY is duur in SQL en kan de kosten van een query aanzienlijk verhogen. Als u een foutenmelding die ontvangt dat de EXPLAIN kosten van uw vraag te hoog is, probeer eliminerend om het even welke ORDER BY s van uw vraag tenzij vereist.

Dit wil niet zeggen dat ORDER BY niet kan worden gebruikt, alleen dat het alleen moet worden gebruikt wanneer dat nodig is.

GROEP BY en ORDE BY gebruiken

Er kunnen enkele situaties zijn waarin deze aanpak niet strookt met wat u probeert te doen. De algemene regel is dat als u een GROUP BY en ORDER BY gebruikt, u de kolommen in beide componenten in dezelfde volgorde moet plaatsen. Bijvoorbeeld:

In plaats van dit…
probeer dit!
SQL vraag met GROEP DOOR vóór filter
SQL vraag met filter vóór GROUP DOOR

Omloop omhoog

De beste manier om SQL te leren schrijven - en dit efficiënt te doen - is door proef en fout. Als u wilt weten wat het beste voor u werkt, probeert u een aantal rapporten opnieuw te maken met alleen de SQL-editor.

recommendation-more-help
e1f8a7e8-8cc7-4c99-9697-b1daa1d66dbc