62.5. ÐндекÑÑ BRIN #
62.5.1. Ðведение #
BRIN ÑаÑÑиÑÑовÑваеÑÑÑ ÐºÐ°Ðº «Block Range Index» (ÐÐ½Ð´ÐµÐºÑ Ð·Ð¾Ð½ блоков). BRIN пÑедназнаÑаеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ ÑаблиÑ, в коÑоÑÑÑ Ð¾Ð¿ÑеделÑннÑе ÑÑолбÑÑ Ð½ÐµÐºÐ¾ÑоÑÑм еÑÑеÑÑвеннÑм обÑазом коÑÑелиÑÑÑÑ Ñ Ð¸Ñ ÑизиÑеÑким ÑаÑположением в ÑаблиÑе.
Ð BRIN иÑполÑзÑеÑÑÑ Ð¿Ð¾Ð½ÑÑие Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² (или Â«Ð·Ð¾Ð½Ñ ÑÑÑаниÑ»). Ðоной блоков назÑваеÑÑÑ Ð³ÑÑппа ÑÑÑаниÑ, ÑизиÑеÑки ÑаÑположеннÑÑ Ð² ÑаблиÑе ÑÑдом; Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð² индекÑе ÑÐ¾Ñ ÑанÑеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÐ°Ñ ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ. ÐапÑимеÑ, в ÑаблиÑе заказов магазина Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑÑÑ Ð¿Ð¾Ð»Ðµ Ñ Ð´Ð°Ñой Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ð°, и пÑакÑиÑеÑки вÑегда запиÑи более ÑÐ°Ð½Ð½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ð¾Ð² и в ÑаблиÑе бÑдÑÑ ÑазмеÑÐµÐ½Ñ Ð±Ð»Ð¸Ð¶Ðµ к наÑалÑ; в ÑаблиÑе, ÑодеÑжаÑей ÑÑÐ¾Ð»Ð±ÐµÑ Ñ Ð¿Ð¾ÑÑовÑм индекÑом, Ñакже еÑÑеÑÑвеннÑм обÑазом могÑÑ Ð³ÑÑппиÑоваÑÑÑÑ Ð·Ð°Ð¿Ð¸Ñи по гоÑодам.
ÐндекÑÑ BRIN могÑÑ ÑдовлеÑвоÑÑÑÑ Ð·Ð°Ð¿ÑоÑÑ, вÑполнÑÑ Ð¾Ð±ÑÑное ÑканиÑование по биÑовой каÑÑе, и бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð²Ñе коÑÑежи во вÑÐµÑ ÑÑÑаниÑÐ°Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ зонÑ, еÑли ÑводнÑе даннÑе, ÑÐ¾Ñ ÑанÑннÑе в индекÑе, ÑооÑвеÑÑÑвÑÑÑ ÑÑловиÑм запÑоÑа. ÐÑполниÑÐµÐ»Ñ Ð·Ð°Ð¿ÑоÑа должен пеÑепÑовеÑиÑÑ ÑÑи коÑÑежи и оÑбÑоÑиÑÑ Ñе, ÑÑо не ÑооÑвеÑÑÑвÑÑÑ ÑÑловиÑм запÑоÑа â дÑÑгими Ñловами, ÑÑи индекÑÑ Ð½ÐµÑоÑнÑе. Так как Ð¸Ð½Ð´ÐµÐºÑ BRIN оÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкий, ÑканиÑование индекÑа влеÑÑÑ Ð¼Ð¸Ð·ÐµÑнÑе издеÑжки по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾ÑледоваÑелÑнÑм ÑканиÑованием, но Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±Ð»Ð°ÑÑей ÑаблиÑÑ, коÑоÑÑе опÑеделÑнно не ÑодеÑÐ¶Ð°Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие коÑÑежи.
ÐонкÑеÑнÑе даннÑе, коÑоÑÑе бÑдÑÑ Ñ ÑаниÑÑÑ Ð² индекÑе BRIN, а Ñакже запÑоÑÑ, коÑоÑÑе ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжаÑÑ ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ, завиÑÑÑ Ð¾Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов, вÑбÑанного Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑолбÑа индекÑа. ÐапÑимеÑ, ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ñм поÑÑдком ÑоÑÑиÑовки могÑÑ Ð¸Ð¼ÐµÑÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов, Ñ ÑанÑÑие минималÑное и макÑималÑное знаÑение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð²; Ð´Ð»Ñ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑÐºÐ¸Ñ Ñипов Ð¼Ð¾Ð¶ÐµÑ Ñ ÑаниÑÑÑÑ Ð¿ÑÑмоÑголÑник, вмеÑаÑÑий вÑе обÑекÑÑ Ð² зоне блоков.
Ð Ð°Ð·Ð¼ÐµÑ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² опÑеделÑеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑом Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ pages_per_range. ЧиÑло запиÑей в индекÑе бÑÐ´ÐµÑ ÑавнÑÑÑÑÑ ÑазмеÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð² ÑÑÑаниÑаÑ
, делÑÐ½Ð½Ð¾Ð¼Ñ Ð½Ð° ÑÑÑановленное знаÑение pages_per_range. Таким обÑазом, Ñем менÑÑе ÑÑо ÑиÑло, Ñем болÑÑе ÑÑановиÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ (Ñак как в нÑм ÑÑебÑеÑÑÑ Ñ
ÑаниÑÑ Ð±Ð¾Ð»ÑÑе ÑлеменÑов), но в Ñо же вÑÐµÐ¼Ñ ÑводнÑе даннÑе могÑÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑоÑнÑми и болÑÑее ÑиÑло блоков даннÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑопÑÑено пÑи ÑканиÑовании индекÑа.
62.5.1.1. ÐбÑлÑживание индекÑа #
Ðо вÑÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ÑканиÑÑÑÑÑÑ Ð²Ñе ÑÑÑеÑÑвÑÑÑие ÑÑÑаниÑÑ, и в ÑезÑлÑÑаÑе в индекÑе ÑоздаÑÑÑÑ ÑводнÑй коÑÑеж Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ зонÑ, в Ñом ÑиÑле, возможно неполной Ð·Ð¾Ð½Ñ Ð² конÑе. Ðо меÑе Ñого, как даннÑми наполнÑÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÑÑаниÑÑ, еÑли они оказÑваÑÑÑÑ Ð² Ð·Ð¾Ð½Ð°Ñ , Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ñже еÑÑÑ ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ, она бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð° Ñ ÑÑÑÑом даннÑÑ Ð¸Ð· новÑÑ ÐºÐ¾ÑÑежей. ÐÑли же ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑÑÑаниÑа, не попадаÑÑÐ°Ñ Ð² поÑледнÑÑ Ð·Ð¾Ð½Ñ, Ð´Ð»Ñ Ð·Ð¾Ð½Ñ, в коÑоÑÑÑ Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð½Ð¾Ð²Ð°Ñ ÑÑÑаниÑа, ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ðµ ÑаÑÑÑиÑÑваеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки; коÑÑежи на ÑÐ°ÐºÐ¸Ñ ÑÑÑаниÑÐ°Ñ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÑÑÑÑннÑми, пока не бÑÐ´ÐµÑ Ð¿ÑоведÑн наÑалÑнÑй ÑаÑÑÑÑ ÑводнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ ÑÑой зонÑ.
ÐаÑалÑнÑй ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ Ð·Ð¾Ð½Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизводиÑÑÑÑ Ð½ÐµÑколÑкими ÑпоÑобами. Ðо-пеÑвÑÑ , Ñводка ÑаÑÑÑиÑÑваеÑÑÑ Ð² Ñ Ð¾Ð´Ðµ пÑоÑедÑÑÑ VACUUM, запÑÑенной вÑÑÑнÑÑ Ð¸Ð»Ð¸ из пÑоÑеÑÑа autovacuum, Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð·Ð¾Ð½. Ðо-вÑоÑÑÑ , еÑли вклÑÑÑн паÑамеÑÑ autosummarize Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ оÑклÑÑÑн), пÑи авÑооÑиÑÑке ÑÑой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑоизводиÑÑÑ ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ Ð²ÑÐµÑ Ð·Ð¾Ð½ без Ñводной инÑоÑмаÑии, Ð¾Ñ Ð²Ð°ÑÑваÑÑÐ¸Ñ Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ заполненнÑе ÑÑÑаниÑÑ ÑаблиÑÑ, незавиÑимо Ð¾Ñ Ñого, вÑполнÑеÑÑÑ Ð»Ð¸ авÑооÑиÑÑка именно ÑÑой ÑаблиÑÑ; подÑобнее Ñм. ниже.
ÐаконеÑ, можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии (пока они вÑполнÑÑÑÑÑ, search_path вÑеменно менÑеÑÑÑ Ð½Ð° pg_catalog, pg_temp):
brin_summarize_new_values(regclass), ÑаÑÑÑиÑÑваÑÑÑÑ ÑÐ²Ð¾Ð´ÐºÑ Ð´Ð»Ñ Ð·Ð¾Ð½ без ÑводнÑÑ
даннÑÑ
; |
brin_summarize_range(regclass, bigint), ÑаÑÑÑиÑÑваÑÑÑÑ ÑÐ²Ð¾Ð´ÐºÑ Ð´Ð»Ñ Ð·Ð¾Ð½Ñ Ð±ÐµÐ· ÑводнÑÑ
даннÑÑ
, ÑодеÑжаÑей ÑказаннÑÑ ÑÑÑаниÑÑ. |
Ðогда вклÑÑÑн Ñежим авÑопеÑеÑÑÑÑа Ñводки, пÑи пеÑвом добавлении даннÑÑ
в пеÑвÑÑ ÑÑÑаниÑÑ Ð½Ð¾Ð²Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð¿ÑоÑеÑÑÑ autovacuum пеÑедаÑÑÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ ÑÑой зонÑ. ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñполнен пÑи ÑледÑÑÑей обÑабоÑке ÑÑой Ð±Ð°Ð·Ñ ÑабоÑим пÑоÑеÑÑом авÑооÑиÑÑки. ÐÑли оÑеÑÐµÐ´Ñ Ð·Ð°Ð¿ÑоÑов пеÑеполнена, запÑÐ¾Ñ Ð² Ð½ÐµÑ Ð½Ðµ запиÑÑваеÑÑÑ Ð¸ в жÑÑнал ÑеÑвеÑа вÑводиÑÑÑ ÑооÑвеÑÑÑвÑÑÑее ÑообÑение:
LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was not recorded
Ð ÑÑом ÑлÑÑае зона оÑÑанеÑÑÑ Ð±ÐµÐ· Ñводного знаÑениÑ, а ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ ÑаÑÑÑиÑаÑÑ, нÑжно вÑÑÑнÑÑ Ð²ÑполниÑÑ Ð¾ÑиÑÑÐºÑ ÑÑой ÑаблиÑÑ Ð¸Ð»Ð¸ вÑзваÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· вÑÑеÑказаннÑÑ ÑÑнкÑий.
РнаобоÑоÑ, можно ÑдалиÑÑ Ñводное знаÑение Ð´Ð»Ñ Ð·Ð¾Ð½Ñ, вÑзвав ÑÑнкÑÐ¸Ñ brin_desummarize_range(regclass, bigint), ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, когда ÑÑÐ¾Ñ ÐºÐ¾ÑÑеж в индекÑе ÑÑановиÑÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ñ
оÑоÑим пÑедÑÑавлением ÑооÑвеÑÑÑвÑÑÑиÑ
даннÑÑ
, Ñак как они изменилиÑÑ. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 9.28.8.
62.5.2. ÐÑÑÑоеннÑе клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов #
РбазовÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐµÐ½Ñ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов BRIN, пеÑеÑиÑленнÑе в ТаблиÑе 62.4.
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax Ñ ÑанÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑе и макÑималÑнÑе знаÑениÑ, вÑÑÑеÑаÑÑиеÑÑ Ð² индекÑиÑованном ÑÑолбÑе в опÑеделÑнной зоне. ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов inclusion Ñ ÑанÑÑ Ð·Ð½Ð°Ñение, в коÑоÑом ÑодеÑжаÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑиÑованного ÑÑолбÑа в опÑеделÑнной зоне. ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов bloom ÑÑÑоÑÑ ÑилÑÑÑ ÐлÑма Ð´Ð»Ñ Ð²ÑÐµÑ Ð·Ð½Ð°Ñений в опÑеделÑнной зоне. ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax-multi Ñ ÑанÑÑ Ð½ÐµÑколÑко минималÑнÑÑ Ð¸ макÑималÑнÑÑ Ð·Ð½Ð°Ñений, вÑÑÑеÑаÑÑÐ¸Ñ ÑÑ Ð² индекÑиÑованном ÑÑолбÑе в опÑеделÑнной зоне.
ТаблиÑа 62.4. ÐÑÑÑоеннÑе клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов BRIN
| ÐÐ¼Ñ | ÐндекÑиÑÑемÑе опеÑаÑоÑÑ |
|---|---|
bit_minmax_ops | = (bit,bit) |
< (bit,bit) | |
> (bit,bit) | |
<= (bit,bit) | |
>= (bit,bit) | |
box_inclusion_ops | @> (box,point) |
<< (box,box) | |
&< (box,box) | |
&> (box,box) | |
>> (box,box) | |
<@ (box,box) | |
@> (box,box) | |
~= (box,box) | |
&& (box,box) | |
<<| (box,box) | |
&<| (box,box) | |
|&> (box,box) | |
|>> (box,box) | |
bpchar_bloom_ops | = (character,character) |
bpchar_minmax_ops | = (character,character) |
< (character,character) | |
<= (character,character) | |
> (character,character) | |
>= (character,character) | |
bytea_bloom_ops | = (bytea,bytea) |
bytea_minmax_ops | = (bytea,bytea) |
< (bytea,bytea) | |
<= (bytea,bytea) | |
> (bytea,bytea) | |
>= (bytea,bytea) | |
char_bloom_ops | = ("char","char") |
char_minmax_ops | = ("char","char") |
< ("char","char") | |
<= ("char","char") | |
> ("char","char") | |
>= ("char","char") | |
date_bloom_ops | = (date,date) |
date_minmax_ops | = (date,date) |
< (date,date) | |
<= (date,date) | |
> (date,date) | |
>= (date,date) | |
date_minmax_multi_ops | = (date,date) |
< (date,date) | |
<= (date,date) | |
> (date,date) | |
>= (date,date) | |
float4_bloom_ops | = (float4,float4) |
float4_minmax_ops | = (float4,float4) |
< (float4,float4) | |
> (float4,float4) | |
<= (float4,float4) | |
>= (float4,float4) | |
float4_minmax_multi_ops | = (float4,float4) |
< (float4,float4) | |
> (float4,float4) | |
<= (float4,float4) | |
>= (float4,float4) | |
float8_bloom_ops | = (float8,float8) |
float8_minmax_ops | = (float8,float8) |
< (float8,float8) | |
<= (float8,float8) | |
> (float8,float8) | |
>= (float8,float8) | |
float8_minmax_multi_ops | = (float8,float8) |
< (float8,float8) | |
<= (float8,float8) | |
> (float8,float8) | |
>= (float8,float8) | |
inet_inclusion_ops | << (inet,inet) |
<<= (inet,inet) | |
>> (inet,inet) | |
>>= (inet,inet) | |
= (inet,inet) | |
&& (inet,inet) | |
inet_bloom_ops | = (inet,inet) |
inet_minmax_ops | = (inet,inet) |
< (inet,inet) | |
<= (inet,inet) | |
> (inet,inet) | |
>= (inet,inet) | |
inet_minmax_multi_ops | = (inet,inet) |
< (inet,inet) | |
<= (inet,inet) | |
> (inet,inet) | |
>= (inet,inet) | |
int2_bloom_ops | = (int2,int2) |
int2_minmax_ops | = (int2,int2) |
< (int2,int2) | |
> (int2,int2) | |
<= (int2,int2) | |
>= (int2,int2) | |
int2_minmax_multi_ops | = (int2,int2) |
< (int2,int2) | |
> (int2,int2) | |
<= (int2,int2) | |
>= (int2,int2) | |
int4_bloom_ops | = (int4,int4) |
int4_minmax_ops | = (int4,int4) |
< (int4,int4) | |
> (int4,int4) | |
<= (int4,int4) | |
>= (int4,int4) | |
int4_minmax_multi_ops | = (int4,int4) |
< (int4,int4) | |
> (int4,int4) | |
<= (int4,int4) | |
>= (int4,int4) | |
int8_bloom_ops | = (bigint,bigint) |
int8_minmax_ops | = (bigint,bigint) |
< (bigint,bigint) | |
> (bigint,bigint) | |
<= (bigint,bigint) | |
>= (bigint,bigint) | |
int8_minmax_multi_ops | = (bigint,bigint) |
< (bigint,bigint) | |
> (bigint,bigint) | |
<= (bigint,bigint) | |
>= (bigint,bigint) | |
interval_bloom_ops | = (interval,interval) |
interval_minmax_ops | = (interval,interval) |
< (interval,interval) | |
<= (interval,interval) | |
> (interval,interval) | |
>= (interval,interval) | |
interval_minmax_multi_ops | = (interval,interval) |
< (interval,interval) | |
<= (interval,interval) | |
> (interval,interval) | |
>= (interval,interval) | |
macaddr_bloom_ops | = (macaddr,macaddr) |
macaddr_minmax_ops | = (macaddr,macaddr) |
< (macaddr,macaddr) | |
<= (macaddr,macaddr) | |
> (macaddr,macaddr) | |
>= (macaddr,macaddr) | |
macaddr_minmax_multi_ops | = (macaddr,macaddr) |
< (macaddr,macaddr) | |
<= (macaddr,macaddr) | |
> (macaddr,macaddr) | |
>= (macaddr,macaddr) | |
macaddr8_bloom_ops | = (macaddr8,macaddr8) |
macaddr8_minmax_ops | = (macaddr8,macaddr8) |
< (macaddr8,macaddr8) | |
<= (macaddr8,macaddr8) | |
> (macaddr8,macaddr8) | |
>= (macaddr8,macaddr8) | |
macaddr8_minmax_multi_ops | = (macaddr8,macaddr8) |
< (macaddr8,macaddr8) | |
<= (macaddr8,macaddr8) | |
> (macaddr8,macaddr8) | |
>= (macaddr8,macaddr8) | |
name_bloom_ops | = (name,name) |
name_minmax_ops | = (name,name) |
< (name,name) | |
<= (name,name) | |
> (name,name) | |
>= (name,name) | |
numeric_bloom_ops | = (numeric,numeric) |
numeric_minmax_ops | = (numeric,numeric) |
< (numeric,numeric) | |
<= (numeric,numeric) | |
> (numeric,numeric) | |
>= (numeric,numeric) | |
numeric_minmax_multi_ops | = (numeric,numeric) |
< (numeric,numeric) | |
<= (numeric,numeric) | |
> (numeric,numeric) | |
>= (numeric,numeric) | |
oid_bloom_ops | = (oid,oid) |
oid_minmax_ops | = (oid,oid) |
< (oid,oid) | |
> (oid,oid) | |
<= (oid,oid) | |
>= (oid,oid) | |
oid_minmax_multi_ops | = (oid,oid) |
< (oid,oid) | |
> (oid,oid) | |
<= (oid,oid) | |
>= (oid,oid) | |
pg_lsn_bloom_ops | = (pg_lsn,pg_lsn) |
pg_lsn_minmax_ops | = (pg_lsn,pg_lsn) |
< (pg_lsn,pg_lsn) | |
> (pg_lsn,pg_lsn) | |
<= (pg_lsn,pg_lsn) | |
>= (pg_lsn,pg_lsn) | |
pg_lsn_minmax_multi_ops | = (pg_lsn,pg_lsn) |
< (pg_lsn,pg_lsn) | |
> (pg_lsn,pg_lsn) | |
<= (pg_lsn,pg_lsn) | |
>= (pg_lsn,pg_lsn) | |
range_inclusion_ops | = (anyrange,anyrange) |
< (anyrange,anyrange) | |
<= (anyrange,anyrange) | |
>= (anyrange,anyrange) | |
> (anyrange,anyrange) | |
&& (anyrange,anyrange) | |
@> (anyrange,anyelement) | |
@> (anyrange,anyrange) | |
<@ (anyrange,anyrange) | |
<< (anyrange,anyrange) | |
>> (anyrange,anyrange) | |
&< (anyrange,anyrange) | |
&> (anyrange,anyrange) | |
-|- (anyrange,anyrange) | |
text_bloom_ops | = (text,text) |
text_minmax_ops | = (text,text) |
< (text,text) | |
<= (text,text) | |
> (text,text) | |
>= (text,text) | |
tid_bloom_ops | = (tid,tid) |
tid_minmax_ops | = (tid,tid) |
< (tid,tid) | |
> (tid,tid) | |
<= (tid,tid) | |
>= (tid,tid) | |
tid_minmax_multi_ops | = (tid,tid) |
< (tid,tid) | |
> (tid,tid) | |
<= (tid,tid) | |
>= (tid,tid) | |
timestamp_bloom_ops | = (timestamp,timestamp) |
timestamp_minmax_ops | = (timestamp,timestamp) |
< (timestamp,timestamp) | |
<= (timestamp,timestamp) | |
> (timestamp,timestamp) | |
>= (timestamp,timestamp) | |
timestamp_minmax_multi_ops | = (timestamp,timestamp) |
< (timestamp,timestamp) | |
<= (timestamp,timestamp) | |
> (timestamp,timestamp) | |
>= (timestamp,timestamp) | |
timestamptz_bloom_ops | = (timestamptz,timestamptz) |
timestamptz_minmax_ops | = (timestamptz,timestamptz) |
< (timestamptz,timestamptz) | |
<= (timestamptz,timestamptz) | |
> (timestamptz,timestamptz) | |
>= (timestamptz,timestamptz) | |
timestamptz_minmax_multi_ops | = (timestamptz,timestamptz) |
< (timestamptz,timestamptz) | |
<= (timestamptz,timestamptz) | |
> (timestamptz,timestamptz) | |
>= (timestamptz,timestamptz) | |
time_bloom_ops | = (time,time) |
time_minmax_ops | = (time,time) |
< (time,time) | |
<= (time,time) | |
> (time,time) | |
>= (time,time) | |
time_minmax_multi_ops | = (time,time) |
< (time,time) | |
<= (time,time) | |
> (time,time) | |
>= (time,time) | |
timetz_bloom_ops | = (timetz,timetz) |
timetz_minmax_ops | = (timetz,timetz) |
< (timetz,timetz) | |
<= (timetz,timetz) | |
> (timetz,timetz) | |
>= (timetz,timetz) | |
timetz_minmax_multi_ops | = (timetz,timetz) |
< (timetz,timetz) | |
<= (timetz,timetz) | |
> (timetz,timetz) | |
>= (timetz,timetz) | |
uuid_bloom_ops | = (uuid,uuid) |
uuid_minmax_ops | = (uuid,uuid) |
< (uuid,uuid) | |
> (uuid,uuid) | |
<= (uuid,uuid) | |
>= (uuid,uuid) | |
uuid_minmax_multi_ops | = (uuid,uuid) |
< (uuid,uuid) | |
> (uuid,uuid) | |
<= (uuid,uuid) | |
>= (uuid,uuid) | |
varbit_minmax_ops | = (varbit,varbit) |
< (varbit,varbit) | |
> (varbit,varbit) | |
<= (varbit,varbit) | |
>= (varbit,varbit) |
62.5.2.1. ÐаÑамеÑÑÑ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов #
ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
вÑÑÑоеннÑÑ
клаÑÑов опеÑаÑоÑов можно задаваÑÑ Ð¿Ð°ÑамеÑÑÑ, влиÑÑÑие на иÑ
поведение, а именно: Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов bloom и minmax-multi. У ÑазнÑÑ
клаÑÑов опеÑаÑоÑов ÑазнÑй Ð½Ð°Ð±Ð¾Ñ Ð´Ð¾Ð¿ÑÑÑимÑÑ
паÑамеÑÑов.
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов bloom пÑинимаÑÑ ÑÑи паÑамеÑÑÑ:
n_distinct_per_rangeÐпÑеделÑÐµÑ Ð¿Ñедполагаемое колиÑеÑÑво ÑазлиÑнÑÑ Ð·Ð½Ð°Ñений (без ÑÑÑÑа NULL) в зоне блоков, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾ÑоÑого вÑбиÑаеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑилÑÑÑа ÐлÑма в BRIN-индекÑе. РабоÑÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно паÑамеÑÑÑ
n_distinctÐ´Ð»Ñ ALTER TABLE. ÐоложиÑелÑное знаÑение непоÑÑедÑÑвенно задаÑÑ Ð¿Ñедполагаемое колиÑеÑÑво. ÐинималÑное колиÑеÑÑво ÑазлиÑнÑÑ Ð·Ð½Ð°Ñений (без ÑÑÑÑа NULL) знаÑений â16. ÐÑли заданное знаÑение оÑÑиÑаÑелÑно, Ñо колиÑеÑÑво ÑÐ°ÐºÐ¸Ñ Ð·Ð½Ð°Ñений линейно завиÑÐ¸Ñ Ð¾Ñ Ð¼Ð°ÐºÑималÑного возможного ÑиÑла коÑÑежей в зоне блоков (один блок Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð´Ð¾ 290 ÑÑÑок). ÐоÑÑÑиÑиенÑом завиÑимоÑÑи бÑÐ´ÐµÑ Ð¼Ð¾Ð´ÑÐ»Ñ ÑÑого знаÑениÑ, коÑоÑÑй не должен пÑевÑÑаÑÑ 1. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â-0.1.false_positive_rateÐпÑеделÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼ÑÑ Ð´Ð¾Ð»Ñ Ð»Ð¾Ð¶Ð½ÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑÑ ÑÑабаÑÑваний, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾ÑоÑой вÑбиÑаеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑилÑÑÑа ÐлÑма в BRIN-индекÑе. ÐÑинимаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ñ 0,0001 до 0,25. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0,01, Ñо еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ Ð»Ð¾Ð¶Ð½ÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑÑ ÑÑабаÑÑваний Ñавна 1%.
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax-multi пÑинимаÑÑ ÑÑи паÑамеÑÑÑ:
values_per_rangeÐпÑеделÑÐµÑ Ð¼Ð°ÐºÑималÑное колиÑеÑÑво знаÑений, Ñ ÑанимÑÑ BRIN-индекÑами Ñипа minmax Ð´Ð»Ñ Ð¾Ð±Ð¾Ð±ÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии по зоне блоков. Ðаждое знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой либо ÑоÑкÑ, либо гÑаниÑÑ Ð¸Ð½ÑеÑвала. ÐÑинимаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ñ 8 до 256, а знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 32.
62.5.3. РаÑÑиÑÑемоÑÑÑ #
ÐнÑеÑÑÐµÐ¹Ñ BRIN Ñ Ð°ÑакÑеÑизÑеÑÑÑ Ð²ÑÑоким ÑÑовнем абÑÑÑакÑии и Ñаким обÑазом ÑÑебÑÐµÑ Ð¾Ñ ÑазÑабоÑÑика меÑода доÑÑÑпа ÑеализоваÑÑ ÑолÑко ÑмÑÑловое наполнение обÑабаÑÑваемого Ñипа даннÑÑ . УÑÐ¾Ð²ÐµÐ½Ñ BRIN беÑÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð·Ð°Ð±Ð¾ÑÑ Ð¾ паÑаллелÑном доÑÑÑпе, поддеÑжке жÑÑнала и поиÑке в ÑÑÑÑкÑÑÑе индекÑа.
ÐÑÑ, ÑÑо нÑжно, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑабоÑаÑÑий меÑод доÑÑÑпа BRIN â ÑÑо ÑеализоваÑÑ Ð½ÐµÑколÑко полÑзоваÑелÑÑÐºÐ¸Ñ Ð¼ÐµÑодов, опÑеделÑÑÑÐ¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑводнÑÑ Ð·Ð½Ð°Ñений, Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð² индекÑе, и Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð¾ÑноÑÐµÐ½Ð¸Ñ Ñ ÐºÐ»ÑÑами ÑканиÑованиÑ. Словом, BRIN ÑоÑеÑÐ°ÐµÑ ÑаÑÑиÑÑемоÑÑÑ Ñ ÑнивеÑÑалÑноÑÑÑÑ, повÑоÑнÑм иÑполÑзованием кода и аккÑÑаÑнÑм инÑеÑÑейÑом.
ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов Ð´Ð»Ñ BRIN должен пÑедоÑÑавлÑÑÑ ÑеÑÑÑе меÑода:
BrinOpcInfo *opcInfo(Oid type_oid)ÐозвÑаÑÐ°ÐµÑ Ð²Ð½ÑÑÑеннÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑводнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð½Ð´ÐµÐºÑиÑованнÑÑ ÑÑолбÑов. ÐозвÑаÑаемое знаÑение должно ÑказÑваÑÑ Ð½Ð°
BrinOpcInfo(в памÑÑи palloc) Ñо ÑледÑÑÑим опÑеделением:typedef struct BrinOpcInfo { /* ЧиÑло полей, Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð² ÑÑолбÑе индекÑа ÑÑого клаÑÑа опеÑаÑоÑов */ uint16 oi_nstored; /* ÐепÑозÑаÑнÑй ÑказаÑÐµÐ»Ñ Ð´Ð»Ñ Ð²Ð½ÑÑÑеннего иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»Ð°ÑÑом опеÑаÑоÑов */ void *oi_opaque; /* ÐлеменÑÑ ÐºÐµÑа Ñипов Ð´Ð»Ñ ÑÐ¾Ñ ÑанÑннÑÑ ÑÑолбÑов */ TypeCacheEntry *oi_typcache[FLEXIBLE_ARRAY_MEMBER]; } BrinOpcInfo;Ðоле
BrinOpcInfo.oi_opaqueмогÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов Ð´Ð»Ñ Ð¿ÐµÑедаÑи инÑоÑмаÑии опоÑнÑм ÑÑнкÑиÑм пÑи ÑканиÑовании индекÑа.bool consistent(BrinDesc *bdesc, BrinValues *column, ScanKey *keys, int nkeys)ÐоказÑваеÑ, ÑооÑвеÑÑÑвÑÑÑ Ð»Ð¸ вÑе знаÑÐµÐ½Ð¸Ñ ScanKey заданнÑм индекÑиÑованнÑм знаÑениÑм некоÑоÑой зонÑ. ÐÐ¾Ð¼ÐµÑ Ñелевого аÑÑибÑÑа пеÑедаÑÑÑÑ Ð² ÑоÑÑаве клÑÑа ÑканиÑованиÑ. ÐÐ»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ аÑÑибÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ Ð½ÐµÑколÑко клÑÑей ÑканиÑованиÑ. ÐолиÑеÑÑво запиÑей опÑеделÑеÑÑÑ Ð¿Ð°ÑамеÑÑом
nkeys.bool consistent(BrinDesc *bdesc, BrinValues *column, ScanKey key)ÐоказÑваеÑ, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ знаÑение ScanKey заданнÑм индекÑиÑованнÑм знаÑениÑм некоÑоÑой зонÑ. ÐÐ¾Ð¼ÐµÑ Ñелевого аÑÑибÑÑа пеÑедаÑÑÑÑ Ð² ÑоÑÑаве клÑÑа ÑканиÑованиÑ. ÐÑÐ¾Ñ Ð¾Ð±ÑаÑно ÑовмеÑÑимÑй ваÑÐ¸Ð°Ð½Ñ ÑÑнкÑии consistent ÑÑÑаÑел.
bool addValue(BrinDesc *bdesc, BrinValues *column, Datum newval, bool isnull)ÐÐ»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ коÑÑежа индекÑа и индекÑиÑÑемого знаÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ Ð²ÑбÑаннÑй аÑÑибÑÑ ÐºÐ¾ÑÑежа, ÑÑÐ¾Ð±Ñ Ð¾Ð½ дополниÑелÑно Ð¾Ñ Ð²Ð°ÑÑвал новое знаÑение. ÐÑли в коÑÑеж вноÑÑÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо изменениÑ, возвÑаÑаеÑÑÑ
true.bool unionTuples(BrinDesc *bdesc, BrinValues *a, BrinValues *b)ÐонÑолидиÑÑÐµÑ Ð´Ð²Ð° коÑÑежа индекÑа. ÐолÑÑÐ°Ñ Ð´Ð²Ð° коÑÑежа, изменÑÐµÑ Ð²ÑбÑаннÑй аÑÑибÑÑ Ð¿ÐµÑвого из Ð½Ð¸Ñ , ÑÑо он Ð¾Ñ Ð²Ð°ÑÑвал оба коÑÑежа. ÐÑоÑой коÑÑеж не изменÑеÑÑÑ.
ÐополниÑелÑно клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов Ð´Ð»Ñ BRIN Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавиÑÑ ÑледÑÑÑий меÑод:
void options(local_relopts *relopts)ÐпÑеделÑÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿Ð°ÑамеÑÑов, ÑпÑавлÑÑÑÐ¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ клаÑÑа опеÑаÑоÑов.
ФÑнкÑии
optionsпеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÑкÑÑÑÑlocal_relopts, в коÑоÑÑÑ Ð½Ñжно внеÑÑи Ð½Ð°Ð±Ð¾Ñ Ð¿Ð°ÑамеÑÑов, оÑноÑÑÑÐ¸Ñ ÑÑ Ðº клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов. ÐбÑаÑаÑÑÑÑ Ðº ÑÑим паÑамеÑÑам из дÑÑÐ³Ð¸Ñ Ð¾Ð¿Ð¾ÑнÑÑ ÑÑнкÑий можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð°ÐºÑоÑовPG_HAS_OPCLASS_OPTIONS()иPG_GET_OPCLASS_OPTIONS().Так как в BRIN и извлеÑение клÑÑа из индекÑиÑÑемÑÑ Ð·Ð½Ð°Ñений, и его пÑедÑÑавление допÑÑкаÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ, могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¿Ð°ÑамеÑÑÑ Ð´Ð»Ñ Ð½Ð°ÑÑÑойки ÑÑого индекÑа.
ÐÑновной диÑÑÑибÑÑив вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ ÑеÑÑÑÑÑ Ñипов клаÑÑов опеÑаÑоÑов: minmax, minmax-multi, inclusion и bloom. ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов, иÑполÑзÑÑÑие Ð¸Ñ , пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑÑÑоеннÑÑ Ñипов даннÑÑ , наÑколÑко ÑÑо ÑмеÑÑно. ÐолÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ñипов даннÑÑ , пÑименÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑе опÑеделениÑ, и обойÑиÑÑ Ñаким обÑазом без напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°; доÑÑаÑоÑно бÑÐ´ÐµÑ Ð¾Ð±ÑÑвиÑÑ Ð½ÑжнÑе запиÑи в каÑалоге. ÐамеÑÑÑе, ÑÑо пÑÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾ ÑеманÑике ÑÑÑаÑегий опеÑаÑоÑов заÑиÑÑ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ коде опоÑнÑÑ ÑÑнкÑий.
Также возможно ÑоздаÑÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов, воплоÑаÑÑие полноÑÑÑÑ Ð´ÑÑгÑÑ ÑеманÑикÑ, ÑазÑабоÑав ÑеализаÑии ÑеÑÑÑÑÑ Ð¾ÑновнÑÑ Ð¾Ð¿Ð¾ÑнÑÑ ÑÑнкÑий, опиÑаннÑÑ Ð²ÑÑе. ÐамеÑÑÑе, ÑÑо обÑаÑÐ½Ð°Ñ ÑовмеÑÑимоÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑазнÑми оÑновнÑми веÑÑиÑми не гаÑанÑиÑÑеÑÑÑ: к пÑимеÑÑ, в ÑледÑÑÑÐ¸Ñ Ð²ÑпÑÑÐºÐ°Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе опоÑнÑе ÑÑнкÑии.
ÐÑи напиÑании клаÑÑа опеÑаÑоÑов Ð´Ð»Ñ Ñипа даннÑÑ , пÑедÑÑавлÑÑÑего полноÑÑÑÑ ÑпоÑÑдоÑенное множеÑÑво, можно иÑполÑзоваÑÑ Ð¾Ð¿Ð¾ÑнÑе ÑÑнкÑии minmax вмеÑÑе Ñ ÑооÑвеÑÑÑвÑÑÑими опеÑаÑоÑами, как показано в ТаблиÑе 62.5. ÐÑе ÑÐ»ÐµÐ½Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов (ÑÑнкÑии и опеÑаÑоÑÑ) ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми.
ТаблиÑа 62.5. ÐомеÑа ÑÑÑаÑегий и опоÑнÑÑ ÑÑнкÑий Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов minmax
| Член клаÑÑа опеÑаÑоÑов | ÐбÑÐµÐºÑ |
|---|---|
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 1 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_opcinfo() |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 2 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_add_value() |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 3 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_consistent() |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 4 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_union() |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 2 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе-или-Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 3 | опеÑаÑÐ¾Ñ Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 4 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе-или-Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе |
ÐÑи напиÑании клаÑÑа опеÑаÑоÑов Ð´Ð»Ñ Ñложного Ñипа даннÑÑ , знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑого вклÑÑаÑÑÑÑ Ð² дÑÑгой Ñип, можно иÑполÑзоваÑÑ Ð¾Ð¿Ð¾ÑнÑе ÑÑнкÑии inclusion вмеÑÑе Ñ ÑооÑвеÑÑÑвÑÑÑими опеÑаÑоÑами, как показано в ТаблиÑе 62.6. ÐÐ»Ñ ÑÑого ÑÑебÑеÑÑÑ Ð¾Ð´Ð½Ð° дополниÑелÑÐ½Ð°Ñ ÑÑнкÑиÑ, коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ напиÑаÑÑ Ð½Ð° лÑбом ÑзÑке. ÐÐ»Ñ ÑаÑÑиÑенной ÑÑнкÑионалÑноÑÑи можно опÑеделиÑÑ Ð´ÑÑгие ÑÑнкÑии. ÐÑе опеÑаÑоÑÑ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми. ÐекоÑоÑÑе из Ð½Ð¸Ñ ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð´ÑÑÐ³Ð¸Ñ , ÑÑо показано в ÑаблиÑе как завиÑимоÑÑи.
ТаблиÑа 62.6. ÐомеÑа ÑÑÑаÑегий и опоÑнÑÑ ÑÑнкÑий Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов inclusion
| Член клаÑÑа опеÑаÑоÑов | ÐбÑÐµÐºÑ | ÐавиÑимоÑÑÑ |
|---|---|---|
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 1 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_inclusion_opcinfo() |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 2 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_inclusion_add_value() |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 3 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_inclusion_consistent() |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 4 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_inclusion_union() |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 11 | ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ ÑлиÑÐ½Ð¸Ñ Ð´Ð²ÑÑ ÑлеменÑов |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 12 | необÑзаÑелÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÑовеÑки возможноÑÑи ÑлиÑÐ½Ð¸Ñ Ð´Ð²ÑÑ ÑлеменÑов |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 13 | необÑзаÑелÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÑовеÑки, ÑодеÑжиÑÑÑ Ð»Ð¸ один ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² дÑÑгом |  |
| ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ 14 | необÑзаÑелÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÑовеÑки, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÑÑÑÑм |  |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 | опеÑаÑÐ¾Ñ Ð»ÐµÐ²ÐµÐµ | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 4 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 2 | опеÑаÑÐ¾Ñ Ð½Ðµ-пÑоÑÑиÑаеÑÑÑ-пÑавее | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 3 | опеÑаÑÐ¾Ñ Ð¿ÐµÑекÑÑваеÑÑÑ |  |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 4 | опеÑаÑÐ¾Ñ Ð½Ðµ-пÑоÑÑиÑаеÑÑÑ-левее | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 | опеÑаÑÐ¾Ñ Ð¿Ñавее | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 2 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 6, 18 | опеÑаÑÐ¾Ñ Ñо-же-или-Ñавно | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 7 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 7, 16, 24, 25 | опеÑаÑÐ¾Ñ ÑодеÑжиÑ-или-Ñавно |  |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 8, 26, 27 | опеÑаÑÐ¾Ñ ÑодеÑжиÑÑÑ-в-или-Ñавно | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 3 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 9 | опеÑаÑÐ¾Ñ Ð½Ðµ-пÑоÑÑиÑаеÑÑÑ-вÑÑе | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 11 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 10 | опеÑаÑÐ¾Ñ Ð½Ð¸Ð¶Ðµ | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 12 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 11 | опеÑаÑÐ¾Ñ Ð²ÑÑе | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 9 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 12 | опеÑаÑÐ¾Ñ Ð½Ðµ-пÑоÑÑиÑаеÑÑÑ-ниже | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 10 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 20 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 21 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе-или-Ñавно | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 22 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 23 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе-или-Ñавно | СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 |
ÐомеÑа опоÑнÑÑ
ÑÑнкÑий Ð¾Ñ 1 до 10 заÑезеÑвиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð²Ð½ÑÑÑенниÑ
ÑÑнкÑий BRIN, Ñак ÑÑо ÑÑнкÑии ÑÑÐ¾Ð²Ð½Ñ SQL наÑинаÑÑÑÑ Ñ Ð½Ð¾Ð¼ÐµÑа 11. ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑ 11 ÑвлÑеÑÑÑ Ð¾Ñновной, необÑ
одимой Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа. Ðна должна пÑинимаÑÑ Ð´Ð²Ð° аÑгÑменÑа Ñого же Ñипа даннÑÑ
, ÑÑо и Ñелевой Ñип клаÑÑа, и возвÑаÑаÑÑ Ð¸Ñ
обÑединение. ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов inclusion Ð¼Ð¾Ð¶ÐµÑ ÑоÑ
ÑанÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² ÑазлиÑнÑÑ
ÑипаÑ
даннÑÑ
, в завиÑимоÑÑи Ð¾Ñ Ð¿Ð°ÑамеÑÑа STORAGE. ÐозвÑаÑаемое ÑÑнкÑией обÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñение должно ÑооÑвеÑÑÑвоваÑÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
STORAGE.
ÐпоÑнÑе ÑÑнкÑии под номеÑами 12 и 14 пÑедоÑÑавлÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки неÑегÑлÑÑноÑÑей вÑÑÑоеннÑÑ Ñипов даннÑÑ . ФÑнкÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑ 12 пÑименÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑабоÑÑ Ñ ÑеÑевÑми адÑеÑами из ÑазлиÑнÑÑ ÑемейÑÑв, коÑоÑÑе нелÑÐ·Ñ Ð¾Ð±ÑединÑÑÑ. ФÑнкÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑ 14 пÑименÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки зон Ñ Ð¿ÑÑÑÑми знаÑениÑми. ФÑнкÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑ 13 ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑной, но ÑекомендÑемой; она пÑовеÑÑÐµÑ Ð½Ð¾Ð²Ð¾Ðµ знаÑение, пÑежде Ñем оно бÑÐ´ÐµÑ Ð¿ÐµÑедано ÑÑнкÑии обÑединениÑ. ÐнÑÑаÑÑÑÑкÑÑÑа BRIN Ð¼Ð¾Ð¶ÐµÑ ÑопÑимизиÑоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе опеÑаÑии, когда обÑединение не менÑеÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¿Ñименение ÑÑой ÑÑнкÑии Ð¼Ð¾Ð¶ÐµÑ ÑпоÑобÑÑвоваÑÑ ÑвелиÑÐµÐ½Ð¸Ñ Ð±ÑÑÑÑодейÑÑÐ²Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа.
ÐÑи напиÑании клаÑÑа опеÑаÑоÑов Ð´Ð»Ñ Ñипа даннÑÑ , коÑоÑÑй ÑеализÑÐµÑ ÑолÑко опеÑаÑÐ¾Ñ ÑавенÑÑва и поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñ ÐµÑиÑование, можно иÑполÑзоваÑÑ Ð¾Ð¿Ð¾ÑнÑе пÑоÑедÑÑÑ bloom вмеÑÑе Ñ ÑооÑвеÑÑÑвÑÑÑими опеÑаÑоÑами, как показано в ТаблиÑа 62.7. ÐÑе ÑÐ»ÐµÐ½Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов (пÑоÑедÑÑÑ Ð¸ опеÑаÑоÑÑ) ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми.
ТаблиÑа 62.7. ÐомеÑа ÑÑÑаÑегий и опоÑнÑÑ Ð¿ÑоÑедÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов bloom
| Член клаÑÑа опеÑаÑоÑов | ÐбÑÐµÐºÑ |
|---|---|
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 1 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_bloom_opcinfo() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 2 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_bloom_add_value() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 3 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_bloom_consistent() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 4 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_bloom_union() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 5 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_bloom_options() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 11 | ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñ ÐµÑа ÑлеменÑа |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 | опеÑаÑÐ¾Ñ Ñавно |
ÐомеÑа опоÑнÑÑ Ð¿ÑоÑедÑÑ 1-10 заÑезеÑвиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð²Ð½ÑÑÑÐµÐ½Ð½Ð¸Ñ ÑÑнкÑий BRIN, Ñак ÑÑо ÑÑнкÑии ÑÑÐ¾Ð²Ð½Ñ SQL наÑинаÑÑÑÑ Ñ Ð½Ð¾Ð¼ÐµÑа 11. ÐпоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑ 11 ÑвлÑеÑÑÑ Ð¾Ñновной, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа. Ðна должна пÑинимаÑÑ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ñого же Ñипа даннÑÑ , ÑÑо и клаÑÑ Ð¾Ð¿ÐµÑаÑоÑа, и возвÑаÑаÑÑ Ñ ÐµÑ Ð·Ð½Ð°ÑениÑ.
ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax-multi Ñакже иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñипов даннÑÑ , пÑедÑÑавлÑÑÑÐ¸Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑпоÑÑдоÑенное множеÑÑво, и Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð¿ÑоÑÑо как ÑаÑÑиÑение клаÑÑа опеÑаÑоÑов minmax. ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ блока обобÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾ знаÑениÑм в один непÑеÑÑвнÑй инÑеÑвал, а minmax-multi позволÑÐµÑ Ð¾Ð±Ð¾Ð±ÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾ знаÑениÑм в неÑколÑко менÑÑÐ¸Ñ Ð¸Ð½ÑеÑвалов Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивной обÑабоÑки вÑпадаÑÑÐ¸Ñ Ð·Ð½Ð°Ñений. ÐÑи напиÑании клаÑÑа опеÑаÑоÑов можно иÑполÑзоваÑÑ Ð¾Ð¿Ð¾ÑнÑе пÑоÑедÑÑÑ minmax-multi вмеÑÑе Ñ ÑооÑвеÑÑÑвÑÑÑими опеÑаÑоÑами, как показано в ТаблиÑа 62.8. ÐÑе ÑÐ»ÐµÐ½Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов (пÑоÑедÑÑÑ Ð¸ опеÑаÑоÑÑ) ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми.
ТаблиÑа 62.8. ÐомеÑа ÑÑÑаÑегий и опоÑнÑÑ Ð¿ÑоÑедÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов minmax-multi
| Член клаÑÑа опеÑаÑоÑов | ÐбÑÐµÐºÑ |
|---|---|
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 1 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_multi_opcinfo() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 2 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_add_value() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 3 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_consistent() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 4 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_union() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 5 | внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ brin_minmax_multi_options() |
| ÐпоÑÐ½Ð°Ñ Ð¿ÑоÑедÑÑа 11 | ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑаÑÑÑоÑÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð·Ð½Ð°ÑениÑми (ÑÐ°Ð·Ð¼ÐµÑ Ð·Ð¾Ð½Ñ) |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 1 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 2 | опеÑаÑÐ¾Ñ Ð¼ÐµÐ½ÑÑе-или-Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 3 | опеÑаÑÐ¾Ñ Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 4 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе-или-Ñавно |
| СÑÑаÑÐµÐ³Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа 5 | опеÑаÑÐ¾Ñ Ð±Ð¾Ð»ÑÑе |
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов minmax и inclusion поддеÑживаÑÑ Ð¼ÐµÐ¶ÑиповÑе опеÑаÑоÑÑ, Ñ
оÑÑ Ñ Ð½Ð¸Ð¼Ð¸ завиÑимоÑÑи ÑÑановÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑми. ÐлаÑÑ minmax ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð´Ð»Ñ Ð´Ð²ÑÑ
аÑгÑменÑов одного Ñипа опÑеделÑлÑÑ Ð¿Ð¾Ð»Ð½Ñй Ð½Ð°Ð±Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑов. ÐÑо позволÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
, опÑеделÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе набоÑÑ Ð¾Ð¿ÐµÑаÑоÑов. СÑÑаÑегии опеÑаÑоÑов клаÑÑа inclusion могÑÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ð´ÑÑгиÑ
ÑÑÑаÑегий, как показано в ТаблиÑе 62.6, или Ð¾Ñ ÑвоиÑ
ÑобÑÑвеннÑÑ
ÑÑÑаÑегий. ÐÐ»Ñ Ð½Ð¸Ñ
ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð±Ñл опÑеделÑн необÑ
одимÑй опеÑаÑÐ¾Ñ Ñ Ñипом даннÑÑ
STORAGE Ð´Ð»Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ аÑгÑменÑа и дÑÑгим поддеÑживаемÑм Ñипом Ð´Ð»Ñ Ð¿Ñавого аÑгÑменÑа ÑеализÑемого опеÑаÑоÑа. См. опÑеделение float4_minmax_ops в каÑеÑÑве пÑимеÑа Ð´Ð»Ñ minmax и box_inclusion_ops в каÑеÑÑве пÑимеÑа Ð´Ð»Ñ inclusion.