ПостгреСКЛ - Оптимизација упита

Преглед садржаја
Када радимо вишеструке упити У сложеном систему много пута не идемо одговарајућим путем да бисмо постигли оптималне перформансе на нивоу базе података, са тренутним технолошким напретком и рачунарском снагом коју често видимо на нашим серверима можемо мислити да је оптимизација базе података прошлост.
Ово не може бити даље од истине, упркос напретку у снази опреме, базе података су фундаменталне за перформансе апликација, из тог разлога добро написан и високо оптимизован упит може значити неколико секунди оптерећења које штеди у систем, ако ово помножимо са бројем истовремених корисника, видећемо како се троше трошкови и снага.
Оптимизујте упите
Најбољи начин да побољшамо перформансе наших база података је да почнемо с добро написаним упитима, много пута откријемо да упити нису добро написани јер нису оптимизирани колико би требали бити, за то постоји много разлога, један од њих је поновна употреба без свести о коду; Под овим мислимо на то да ако смо у неком тренутку упутили упит који нам одговара са а лефт јоин Наставићемо да га примењујемо када повећавамо број табела које треба консултовати, када га мењамо и мењамо неке клаузуле до унутрашње спајање То би могло скратити путању и уштедети потрошњу процесора.
СКЛ је језик који, иако је прилично лак за читање, има много аспеката и много варијација које нам омогућавају да урадимо нешто што функционише на најбољи и најгори начин, на нама је да знамо како да идентификујемо да ли наше решење припада категорију или другу.
Да бисмо знали да смо на добром путу, једна од најважнијих ствари је ажурирање, односно не можемо наставити са кодирањем у СКЛ -у унутар ПостгреСКЛ као да је то прва верзија када смо у верзија 9.
О коришћењу подупита
Ово је једна од најчешћих грешака које радимо, а то је да размишљамо о упиту као о скупу дијелова које заједно повезујемо док не добијемо коначни резултат, међутим ово понашање има велики утјецај на перформансе наше базе података.
Погледајмо пример овог типичног понашања:
 СЕЛЕЦТ трацтор_ид, (СЕЛЕЦТ ЦОУНТ (*) ФРОМ попис. Факти као Ф ВХЕРЕ Ф.трацт_ид = Т.трацт_ид) Као нум_фацтс, (СЕЛЕЦТ ЦОУНТ (*) ФРОМ попис. Лу_фацт_типес као И ГДЕ И.фацт_типе_ид ИН (СЕЛЕЦТ чињеница_тип_ид ИЗ ПОПИСА). чињенице Ф ГДЕ Ф.трацт_ид = Т.трацт_ид)) Као број_фацт_типес ИЗ пописа.лу_трацтс Као Т; 

Сада, ако видимо графикон ОБЈАШЊИ Из овог упита ћемо схватити колико је скупо то учинити на овај начин:

ЕНЛАРГЕ

Као што видимо, имамо неколико тачака које представљају уска грла у овом упиту, осим свих података који се морају премештати неефикасно, зато ћемо их преписати на оптималнији начин и упоредити са новим графиконом ОБЈАШЊИ.
 СЕЛЕЦТ Т.трацт_ид, ЦОУНТ (ф.фацт_типе_ид) Као нум_фацтс, ЦОУНТ (ДИСТИНЦТ фацт_типе_ид) Ас нум_фацт_типес ИЗ Ценсус.лу_трацтс Ас Т ЛЕФТ ЈОИН попису.фацтс Ас Ф ОН Т.трацт_ид = Ф.трацт_ид ГРОУП БИ Т.трацт_ид; 

У овој новој верзији нашег упита избегавамо коришћење подупита, уместо тога радимо еквивалент са лефт јоин И група одАко видимо графикон, можемо рећи разлику.

ЕНЛАРГЕ

Можемо видети како је начин постизања нашег резултата био много краћи, што нам даје боље перформансе, при чему то не значи да морамо искључити подупите наших алата за рад, већ морамо бити свесни да они могу постоје бољи путеви за оно што тренутно предлажемо.Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен
wave wave wave wave wave