{"id":1232,"date":"2024-12-17T04:06:14","date_gmt":"2024-12-17T04:06:14","guid":{"rendered":"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/"},"modified":"2024-12-17T04:06:14","modified_gmt":"2024-12-17T04:06:14","slug":"brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas","status":"publish","type":"post","link":"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/","title":{"rendered":"BRIN indeksai \u201ePostgreSQL\u201c: pasl\u0117pt\u0173 na\u0161umo brangakmeni\u0173 vadovas"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"\">\n<p>Kai kalbame apie PostgreSQL ir u\u017eklaus\u0173 optimizavim\u0105, dauguma \u017emoni\u0173 i\u0161 karto galvoja apie B-Tree indeksus, GIN, GiST ir pan. Ta\u010diau BRIN indeksai da\u017enai lieka \u0161e\u0161\u0117lyje, nepaisant to, kad kai kuriais atvejais jie yra nepaprastai naudingi. Jie gali \u017eymiai padidinti na\u0161um\u0105, ypa\u010d dirbant su didel\u0117mis lentel\u0117mis ir ribota vieta diske. \u0160iandien paai\u0161kinsiu, kaip veikia BRIN ir kada jis \u0161vie\u010dia.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Turinys:<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Kas_yra_BRIN\" >Kas yra BRIN?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Kada_BRIN_yra_geras_pasirinkimas\" >Kada BRIN yra geras pasirinkimas?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#BRIN_apribojimai\" >BRIN apribojimai<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#BRIN_indekso_sukurimas\" >BRIN indekso suk\u016brimas<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Suvestiniu_automatizavimas\" >Suvestini\u0173 automatizavimas<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#BRIN_operatoriaus_klases_Minmax_ir_itraukimas\" >BRIN operatoriaus klas\u0117s: Minmax ir \u012ftraukimas<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Kodel_itraukimo_klases_yra_svarbios\" >Kod\u0117l \u012ftraukimo klas\u0117s yra svarbios<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Optimizavimo_pavyzdys\" >Optimizavimo pavyzdys<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Parametru_subtilybes\" >Parametr\u0173 subtilyb\u0117s<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#pages_per_range\" >pages_per_range<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#autovacuum_ir_brin_summarize_new_values\" >autovacuum  ir brin_summarize_new_values<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Individualizuotos_operatoriaus_klases\" >Individualizuotos operatoriaus klas\u0117s<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/infonaujiena.lt\/index.php\/2024\/12\/17\/brin-indeksai-postgresql-pasleptu-nasumo-brangakmeniu-vadovas\/#Isvada\" >I\u0161vada<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Kas_yra_BRIN\"><\/span>Kas yra BRIN?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>BRIN rei\u0161kia Block Range Index. Nors \u012fprasti indeksai siekia saugoti i\u0161sami\u0105 informacij\u0105 apie kiekvien\u0105 eilut\u0119, BRIN laikosi kitokio po\u017ei\u016brio. Jis saugo puslapi\u0173 grupi\u0173, vadinam\u0173 \u201ezonomis\u201c, suvestin\u0119 informacij\u0105, o ne indeksuoja kiekvien\u0105 eilut\u0119 atskirai.<\/p>\n<p>Kad b\u016bt\u0173 papras\u010diau, BRIN padalija lentel\u0119 \u012f blokus (kiekviena zona pagal numatytuosius nustatymus paprastai apima 32 puslapius) ir toje zonoje i\u0161saugo minimalias ir did\u017eiausias stulpelio reik\u0161mes (arba kitas apibendrintas charakteristikas, priklausomai nuo operatoriaus klas\u0117s). Kai pateikiate duomen\u0173 u\u017eklaus\u0105, BRIN nustato atitinkamas zonas, o likusias praleid\u017eia.<\/p>\n<p>Ar tai 100% tikslus? Ne visai \u2013 vis tiek tur\u0117site nuskaityti eilutes pasirinktose zonose. Ta\u010diau \u0161is filtravimas yra \u017eymiai greitesnis nei visos lentel\u0117s nuskaitymas.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kada_BRIN_yra_geras_pasirinkimas\"><\/span>Kada BRIN yra geras pasirinkimas?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0160tai keli scenarijai, kuriuose BRIN puikiai tinka:<\/p>\n<ol>\n<li>\n<p><strong>Did\u017eiuliai stalai<\/strong><br \/>\nKai dirbate su lenteles, kuriose yra milijonai ar milijardai eilu\u010di\u0173, tradiciniai B-Tree indeksai gali i\u0161sip\u016bsti ir u\u017eimti daug vietos. Kita vertus, BRIN i\u0161lieka lengvas ir kompakti\u0161kas.<\/p>\n<\/li>\n<li>\n<p><strong>Nat\u016brali\u0173 duomen\u0173 koreliacija<\/strong><br \/>\nJei j\u016bs\u0173 duomenys turi nat\u016brali\u0105 tvark\u0105, BRIN gali b\u016bti ypa\u010d efektyvus. Pavyzd\u017eiui, jei turite <code>order_date<\/code> stulpelyje an <code>orders<\/code> lentel\u0119, tik\u0117tina, kad senesni u\u017esakymai saugomi lentel\u0117s prad\u017eioje, o naujesni \u2013 pabaigoje. U\u017eklausoms, nukreiptoms \u012f konkret\u0173 m\u0117nes\u012f, BRIN greitai susiaurina atitinkamas zonas.<\/p>\n<\/li>\n<li>\n<p><strong>Vietos diske taupymas<\/strong><br \/>\nBRIN indeksai yra nepaprastai kompakti\u0161ki. U\u017euot saugoj\u0119 visas atskiras reik\u0161mes, jie naudoja apibendrintus metaduomenis kiekvienai zonai, o tai suma\u017eina saugojimo reikalavimus.<\/p>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"BRIN_apribojimai\"><\/span>BRIN apribojimai<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kaip ir bet kuris \u012frankis, BRIN turi kompromis\u0173:<\/p>\n<ul>\n<li>\n<strong>Netikslumas:<\/strong> BRIN tiksliai nenustato duomen\u0173 viet\u0173. Tai tik nurodo zonas, kuriose duomenys <em>gali<\/em> b\u016bti, tod\u0117l tose zonose reikia toliau filtruoti.<\/li>\n<li>\n<strong>I\u0161sklaidyti duomenys:<\/strong> Jei stulpeli\u0173 reik\u0161m\u0117s yra i\u0161sklaidytos atsitiktinai, BRIN negal\u0117s veiksmingai pa\u0161alinti nesusijusi\u0173 zon\u0173, tod\u0117l tai bus ma\u017eiau naudinga.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"BRIN_indekso_sukurimas\"><\/span>BRIN indekso suk\u016brimas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0160tai trumpas pavyzdys, kaip sukurti BRIN indeks\u0105:<\/p>\n<pre><code class=\"language-sql\">CREATE INDEX idx_orders_date_brin ON orders\nUSING BRIN(order_date)\nWITH (pages_per_range = 32);\n<\/code><\/pre>\n<p>The <code>pages_per_range<\/code> parametras nustato puslapi\u0173 skai\u010di\u0173 kiekvienoje zonoje. Numatytasis yra 128 puslapiai, bet galite j\u012f koreguoti. Ma\u017eesn\u0117 reik\u0161m\u0117 padidina indekso tikslum\u0105, bet taip pat padidina indekso dyd\u012f. Eksperimentuodami su \u0161iuo parametru galite rasti geriausi\u0105 duomen\u0173 balans\u0105.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Suvestiniu_automatizavimas\"><\/span>Suvestini\u0173 automatizavimas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Galite naudoti pl\u0117tinius, pvz <code>autosummarize<\/code> automatizuoti suvestini\u0173 duomen\u0173 atnaujinim\u0105, nebereikia skambinti rankiniu b\u016bdu <code>brin_summarize_new_values<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"BRIN_operatoriaus_klases_Minmax_ir_itraukimas\"><\/span>BRIN operatoriaus klas\u0117s: Minmax ir \u012ftraukimas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>BRIN naudoja operatori\u0173 klases, kad nustatyt\u0173, kaip apibendrinti duomenis. Du pagrindiniai metodai yra \u0161ie:<\/p>\n<ul>\n<li>\n<strong>Minmax klas\u0117s:<\/strong> I\u0161saugokite minimalias ir did\u017eiausias vertes kiekvienoje zonoje. Idealiai tinka u\u017esakytiems tipams, pvz., skai\u010diams, datoms ar eilut\u0117ms.<\/li>\n<li>\n<strong>\u012etraukimo klas\u0117s:<\/strong> Tvarkykite sud\u0117tingesnius tipus, pvz., geometrij\u0105, IP tinklus ar diapazonus. \u0160iose klas\u0117se saugomi \u201emasiniai\u201c atvaizdai, tokie kaip ribojantys langeliai arba diapazon\u0173 s\u0105jungos, leid\u017eian\u010dios atlikti sud\u0117ting\u0173 duomen\u0173 strukt\u016br\u0173 operacijas.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Kodel_itraukimo_klases_yra_svarbios\"><\/span>Kod\u0117l \u012ftraukimo klas\u0117s yra svarbios<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u012etraukimo klas\u0117s gali efektyviai apdoroti sud\u0117tingus duomenis. Pavyzd\u017eiui, jie gali identifikuoti zonas, kuriose yra objekt\u0173, kertan\u010di\u0173 konkre\u010di\u0105 srit\u012f, tod\u0117l jos gali b\u016bti naudingos naudojant specializuotus naudojimo atvejus, pvz., erdvinius duomenis.<\/p>\n<hr\/>\n<p>BRIN indeksai yra galinga, ta\u010diau nepakankamai naudojama PostgreSQL funkcija. Nors jie netinka kiekvienai situacijai, jie gali \u017eymiai pagerinti na\u0161um\u0105 dirbant su dideliais duomen\u0173 rinkiniais ir nat\u016braliai sutvarkytais duomenimis. Eksperimentuokite su BRIN, kad atskleistum\u0117te jo potencial\u0105 ir optimizuotum\u0117te duomen\u0173 baz\u0117s u\u017eklausas.<\/p>\n<table class=\"table table-bordered table-hover\">\n<thead>\n<tr>\n<th>Vardas<\/th>\n<th>Duomen\u0173 tipas<\/th>\n<th>Operatoriai<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>abstime_minmax_ops<\/td>\n<td>susilaikymas<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>int8_minmax_ops<\/td>\n<td>bigint<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>bit_minmax_ops<\/td>\n<td>\u0161iek tiek<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>varbit_minmax_ops<\/td>\n<td>\u0161iek tiek \u012fvairus<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>box_inclusion_ops<\/td>\n<td>d\u0117\u017eut\u0117<\/td>\n<td><code>&lt;&lt; &amp;&lt; &amp;&amp; &amp;&gt; &gt;&gt; ~= @&gt; &lt;@<\/code><\/td>\n<\/tr>\n<tr>\n<td>bytea_minmax_ops<\/td>\n<td>baitas<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>bpchar_minmax_ops<\/td>\n<td>charakteris<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<tr>\n<td>char_minmax_ops<\/td>\n<td>&#8222;char&#8221;<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>data_minmax_ops<\/td>\n<td>data<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>float8_minmax_ops<\/td>\n<td>dvigubas tikslumas<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>inet_minmax_ops<\/td>\n<td>inet<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>network_inclusion_ops<\/td>\n<td>inet<\/td>\n<td><code>&amp;&amp; &gt;&gt;= &lt;&lt;= = &gt;&gt; &lt;&lt;<\/code><\/td>\n<\/tr>\n<tr>\n<td>int4_minmax_ops<\/td>\n<td>sveikasis skai\u010dius<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>interval_minmax_ops<\/td>\n<td>intervalas<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>macaddr_minmax_ops<\/td>\n<td>macaddr<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>name_minmax_ops<\/td>\n<td>pavadinimas<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>numeric_minmax_ops<\/td>\n<td>skaitinis<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<tr>\n<td>pg_lsn_minmax_ops<\/td>\n<td>pg_lsn<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>oid_minmax_ops<\/td>\n<td>oid<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>range_inclusion_ops<\/td>\n<td>bet kokio tipo diapazonas<\/td>\n<td><code>&lt;&lt; &amp;&lt; &amp;&amp; &amp;&gt; &gt;&gt; @&gt; &lt;@ -<\/code><\/td>\n<\/tr>\n<tr>\n<td>float4_minmax_ops<\/td>\n<td>tikras<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<tr>\n<td>reltime_minmax_ops<\/td>\n<td>retime<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>int2_minmax_ops<\/td>\n<td>smallint<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>text_minmax_ops<\/td>\n<td>tekst\u0105<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>tid_minmax_ops<\/td>\n<td>tid<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<tr>\n<td>timestamp_minmax_ops<\/td>\n<td>laiko \u017eyma be laiko juostos<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>timestampz_minmax_ops<\/td>\n<td>laiko \u017eyma su laiko juosta<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>time_minmax_ops<\/td>\n<td>laikas be laiko juostos<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<tr>\n<td>timetz_minmax_ops<\/td>\n<td>laikas su laiko juosta<\/td>\n<td><<= = >= ><\/td>\n<\/tr>\n<tr>\n<td>uuid_minmax_ops<\/td>\n<td>uuid<\/td>\n<td>< <= = >= ><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Daugeliui tip\u0173 yra minmax operacijos, o egzoti\u0161kesn\u0117ms strukt\u016broms &#8211; \u012ftraukimo operacijos. Tai yra, galite indeksuoti ne tik paprastus skai\u010dius ir eilutes, bet ir sud\u0117tingus tipus. Pavyzd\u017eiui, box_inclusion_ops leis ie\u0161koti objekt\u0173 tam tikroje geografin\u0117je vietov\u0117je, greitai i\u0161kirsdamas zonas, kuriose n\u0117ra tinkam\u0173 objekt\u0173.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Optimizavimo_pavyzdys\"><\/span>Optimizavimo pavyzdys<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Tarkime, kad yra u\u017esakym\u0173 lentel\u0117 su daugybe eilu\u010di\u0173:<\/p>\n<pre><code>CREATE TABLE orders (\n    id            BIGSERIAL PRIMARY KEY,\n    order_date    DATE NOT NULL,\n    customer_id   BIGINT NOT NULL,\n    total_amount  NUMERIC(10, 2) NOT NULL\n);\n<\/code><\/pre>\n<p>Duomen\u0173 kr\u016bvos \u012fterpimas:<\/p>\n<pre><code>INSERT INTO orders (order_date, customer_id, total_amount)\nSELECT\n    (DATE '2023-01-01' + (RANDOM()*365)::INT),\n    (RANDOM()*1000000)::BIGINT,\n    (RANDOM()*1000)::NUMERIC(10,2)\nFROM generate_series(1,10000000) g;\n<\/code><\/pre>\n<p>Dabar sukuriame BRIN indeks\u0105:<\/p>\n<pre><code>CREATE INDEX idx_orders_date_brin ON orders\nUSING BRIN(order_date date_minmax_ops)\nWITH (pages_per_range = 64);\n<\/code><\/pre>\n<p><code>date_minmax_ops<\/code>  sako: mes saugosime minimali\u0105 ir maksimali\u0105 dat\u0105 kiekvienai 64 puslapi\u0173 zonai.<\/p>\n<p>Kai klausiate:<\/p>\n<pre><code>EXPLAIN ANALYZE\nSELECT * FROM orders\nWHERE order_date BETWEEN '2023-06-01' AND '2023-06-15';\n<\/code><\/pre>\n<p>Planas parodys, kad PostgreSQL pirmiausia patikrins BRIN indeks\u0105, nustatys, kuriose zonose gali b\u016bti norimos datos, o likusias dalis praleis. Jei duomenys apytiksliai sur\u016b\u0161iuoti pagal dat\u0105 (pvz., kaip \u012fterpti), papildom\u0173 zon\u0173 skai\u010dius bus suma\u017eintas.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Parametru_subtilybes\"><\/span>Parametr\u0173 subtilyb\u0117s<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"pages_per_range\"><\/span><code>pages_per_range<\/code><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>Ma\u017eesn\u0117s vertyb\u0117s<\/strong>: Pateikite tikslesn\u012f filtravim\u0105 (kiekviena zona yra ma\u017eesn\u0117, tod\u0117l ma\u017eiau \u0161iuk\u0161li\u0173), bet padidinkite indekso dyd\u012f.<\/li>\n<li>\n<strong>Didesn\u0117s vert\u0117s<\/strong>: Suma\u017einkite indekso dyd\u012f, bet pabloginkite tikslum\u0105.<\/li>\n<li>\n<strong>Rekomendacija<\/strong>: patikrinkite tikrus duomenis, kad rastum\u0117te optimal\u0173 balans\u0105.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"autovacuum_ir_brin_summarize_new_values\"><\/span><code>autovacuum<\/code>  ir <code>brin_summarize_new_values<\/code><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h2><span class=\"ez-toc-section\" id=\"Individualizuotos_operatoriaus_klases\"><\/span>Individualizuotos operatoriaus klas\u0117s<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Jei jokia standartin\u0117 operatoriaus klas\u0117 neatitinka j\u016bs\u0173 poreiki\u0173, galite para\u0161yti savo. Tai pa\u017eangesnis metodas, reikalaujantis:<\/p>\n<ul>\n<li>\u012ediekite C funkcijas, kad apib\u016bdintum\u0117te, kaip:\n<ul>\n<li>Suvestin\u0117s vert\u0117s,<\/li>\n<li>Sujungti zonas ir<\/li>\n<li>Patikrinkite sankry\u017eas su u\u017eklausomis.<\/li>\n<\/ul>\n<\/li>\n<li>Tai leid\u017eia indeksuoti unikalias ar egzoti\u0161kas duomen\u0173 strukt\u016bras, ta\u010diau tai sud\u0117tinga, labai technin\u0117 u\u017eduotis.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Isvada\"><\/span>I\u0161vada<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>BRIN indeksai nepakeis B-Tree indeks\u0173 visur. Ta\u010diau tais atvejais, kai duomenys yra sutvarkyti arba turi nat\u016brali\u0105 koreliacij\u0105 su j\u0173 fizine vieta, BRIN gali u\u017etikrinti nuostab\u0173 na\u0161um\u0105 su minimaliu indekso dyd\u017eiu.<\/p>\n<\/p><\/div>\n<p>Jei tekste radote klaid\u0105, si\u0173skite prane\u0161im\u0105 autoriui pa\u017eym\u0117dami klaid\u0105 ir paspausdami Ctrl-Enter.<\/p>\n<p><br \/>\n<br \/><a href=\"https:\/\/techplanet.today\/post\/brin-indices-in-postgresql\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kai kalbame apie PostgreSQL ir u\u017eklaus\u0173 optimizavim\u0105, dauguma \u017emoni\u0173 i\u0161 karto galvoja apie B-Tree indeksus, GIN, GiST ir pan. Ta\u010diau BRIN indeksai da\u017enai lieka \u0161e\u0161\u0117lyje, nepaisant to, kad kai kuriais atvejais jie yra nepaprastai naudingi. Jie gali \u017eymiai padidinti na\u0161um\u0105, ypa\u010d dirbant su didel\u0117mis lentel\u0117mis ir ribota vieta diske. \u0160iandien paai\u0161kinsiu, kaip veikia BRIN ir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1233,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[2381,2377,2378,1419,2380,2379,143],"class_list":["post-1232","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologijos","tag-brangakmeniu","tag-brin","tag-indeksai","tag-nasumo","tag-pasleptu","tag-postgresql","tag-vadovas"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts\/1232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/comments?post=1232"}],"version-history":[{"count":0,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/posts\/1232\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/media\/1233"}],"wp:attachment":[{"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/media?parent=1232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/categories?post=1232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infonaujiena.lt\/index.php\/wp-json\/wp\/v2\/tags?post=1232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}