PostgreSQL - Frågeoptimering

Innehållsförteckning
När vi gör multiplar frågor I ett komplext system många gånger tar vi inte den rätta vägen för att ha optimal prestanda på databasnivå, med nuvarande teknologiska framsteg och den datorkraft som vi ofta ser på våra servrar kan vi tro att databasoptimering är en fråga om det förflutna.
Detta kan inte vara längre från sanningen, trots att utrustningen har utvecklats kraftfullt är databaserna grundläggande för programmens prestanda, därför kan en välskriven och högoptimerad fråga innebära flera sekunders belastning som den sparar i systemet, om vi multiplicerar detta med antalet samtidiga användare ser vi hur kostnaden och kraften gick till spillo.
Optimera frågor
Det bästa sättet att förbättra prestanda för våra databaser är att börja med välskrivna frågor, många gånger finner vi att frågorna inte är välskrivna eftersom de inte är så optimerade som de borde vara, det finns många orsaker till detta, en av dem är återanvändning utan kodmedvetenhet; Med detta menar vi att om vi någon gång gjorde en fråga som fungerar för oss med en vänster gå med Vi kommer att fortsätta att tillämpa det när vi ökar antalet tabeller som ska konsulteras, när vi ändrar det och ändrar några klausuler med inre koppling Det kan förkorta vägen och spara processorkonsumtion.
SQL är ett språk som även om det är ganska lätt att läsa, det har många aspekter och många variationer som gör att vi kan göra något som fungerar på det bästa och sämsta sättet, det är upp till oss att veta hur vi ska identifiera om vår lösning tillhör en kategori eller annat.
För att veta att vi är på rätt väg är en av de viktigaste sakerna att uppdateras, det vill säga att vi inte kan fortsätta att koda i SQL inom PostgreSQL som om det vore den första versionen när vi är i version 9.
Om att använda underfrågor
Detta är ett av de vanligaste misstagen vi gör, och det är att vi tänker på en fråga som en uppsättning bitar som vi sammanfogar tills vi får ett slutligt resultat, men detta beteende har stor inverkan på prestanda för vår databas.
Låt oss se ett exempel på detta typiska beteende:
 SELECT tract_id, (SELECT COUNT (*) FROM census.facts As F WHERE F.tract_id = T.tract_id) As num_facts, (SELECT COUNT (*) FROM census.lu_fact_types As Y WHERE Y.fact_type_id IN (SELECT fact_type_id FROM. fakta F VAR F.tract_id = T.tract_id)) As num_fact_types FROM census.lu_tracts As T; 

Om vi ​​nu ser grafen för FÖRKLARA Från denna fråga kommer vi att inse hur dyrt det är att göra det på detta sätt:

FÖRSTORA

Som vi kan se har vi flera punkter som är flaskhalsar i denna fråga, förutom all data som måste flyttas ineffektivt, för detta kommer vi att skriva om det på ett mer optimalt sätt och jämföra det med en ny graf över FÖRKLARA.
 VÄLJ T.tract_id, COUNT (f.fact_type_id) As num_facts, COUNT (DISTINCT fact_type_id) As num_fact_types FROM census.lu_tracts As T LEFT JOIN census.facts As F ON T.tract_id = F.tract_id GROUP BY T.tractid; 

I den här nya versionen av vår fråga undviker vi att använda underfrågor, istället gör vi en motsvarighet med vänster gå med Y Grupp avOm vi ​​ser diagrammet kan vi se skillnaden.

FÖRSTORA

Vi kan se hur sättet att få vårt resultat har varit mycket kortare vilket ger oss en högre prestanda, med detta betyder vi inte att vi måste utesluta undersökningarna i våra arbetsverktyg, utan snarare att vi måste vara medvetna om att de kan finns bättre vägar för vad vi kan föreslå för tillfället.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave