PostgreSQL - vaicājumu optimizācija

Satura rādītājs
Kad mēs darām daudzkārtņus vaicājumi Sarežģītā sistēmā daudzas reizes mēs neizmantojam atbilstošu ceļu, lai nodrošinātu optimālu veiktspēju datu bāzes līmenī, un, ņemot vērā pašreizējo tehnoloģiju attīstību un skaitļošanas jaudu, ko bieži redzam savos serveros, mēs varam domāt, ka datu bāzes optimizācija ir pagātne.
Tas nevar būt tālāk no patiesības, neskatoties uz aprīkojuma jaudas pieaugumu, datu bāzes ir būtiskas lietojumprogrammu darbībai, tādēļ labi uzrakstīts un ļoti optimizēts vaicājums var nozīmēt vairāku sekunžu slodzi, ko tas ietaupa ja mēs to reizinām ar vienlaicīgu lietotāju skaitu, mēs redzam, kā tika izšķērdētas izmaksas un jauda.
Optimizēt vaicājumus
Labākais veids, kā uzlabot mūsu datu bāzu veiktspēju, ir sākt ar labi uzrakstītiem vaicājumiem. Daudzas reizes mēs atklājam, ka vaicājumi nav labi uzrakstīti, jo tie nav tik optimizēti, kā vajadzētu, tam ir daudz iemeslu, viens no tiem ir atkārtota izmantošana bez koda izpratnes; Ar to mēs domājam, ka, ja kādā brīdī mēs izveidojām vaicājumu, kas mums der ar a kreisais pievienoties Mēs turpināsim to piemērot, palielinot apskatāmo tabulu skaitu, mainot to un mainot dažus noteikumus līdz iekšējais savienojums Tas varētu saīsināt ceļu un ietaupīt procesora patēriņu.
SQL ir valoda, kuru, lai gan to ir diezgan viegli lasīt, tai ir daudz aspektu un daudz variāciju, kas ļauj mums darīt to, kas darbojas vislabākajā un sliktākajā veidā, mūsu ziņā ir zināt, kā noteikt, vai mūsu risinājums pieder kategorija vai cita.
Lai zinātu, ka esam uz pareizā ceļa, viena no vissvarīgākajām lietām ir jāatjaunina, tas ir, mēs nevaram turpināt kodēšanu SQL sistēmā PostgreSQL it kā tā būtu pirmā versija, kad atrodamies versija 9.
Par apakšvaicājumu izmantošanu
Šī ir viena no visbiežāk pieļautajām kļūdām, un tas ir tas, ka mēs uzskatām vaicājumu par gabalu kopumu, ko mēs savienojam kopā, līdz iegūstam gala rezultātu, tomēr šī rīcība ļoti ietekmē mūsu datu bāzes darbību.
Apskatīsim šīs tipiskās uzvedības piemēru:
 SELECT traktta_ID, (SELECT COUNT (*) FROM census.facts As F WHERE F.tract_id = T.tract_id) Kā num_facts, (SELECT COUNT (*) FROM census.lu_fact_types Kā Y WHERE Y.fact_type_id IN (SELECT fact_type_id FROM census. fakti F KUR F.tract_id = T.tract_id)) Kā num_fact_types FROM census.lu_tracts Kā T; 

Tagad, ja mēs redzam grafiku PASKAIDROJIET No šī vaicājuma mēs sapratīsim, cik dārgi ir to darīt šādā veidā:

PALIELINĀT

Kā redzam, mums ir vairāki punkti, kas šajā vaicājumā ir vājās vietas, izņemot visus datus, kas jāpārvieto neefektīvi, tāpēc mēs to pārrakstīsim optimālākā veidā un salīdzināsim ar jaunu grafiku PASKAIDROJIET.
 SELECT T.tract_id, COUNT (f.fact_type_id) Kā num_facts, COUNT (DISTINCT fact_type_id) Kā number_fact_types FROM census.lu_tracts Kā T LEFT JOIN census.facts As F ON T.tract_id = F.tract_id GROUP BY T.tract_id; 

Šajā jaunajā mūsu vaicājuma versijā mēs izvairāmies no apakšvaicājumu izmantošanas, tā vietā mēs veicam ekvivalentu ar kreisais pievienoties Y grupēt pēcJa mēs redzam grafiku, mēs varam pateikt atšķirību.

PALIELINĀT

Mēs redzam, kā veids, kā iegūt rezultātu, ir bijis daudz īsāks, kas dod mums labāku sniegumu, ar to mēs nenozīmē, ka mums ir jāizslēdz mūsu darba rīku apakšvaicājumi, bet gan jāapzinās, ka tie var pastāv labāki ceļi tam, ko mēs šobrīd varam piedāvāt.Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave