<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=BRIN</id>
	<title>BRIN - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=BRIN"/>
	<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=BRIN&amp;action=history"/>
	<updated>2026-05-06T08:51:12Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=BRIN&amp;diff=12441&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «'''BRIN''' (от {{lang-en|'''B'''lock '''R'''ange '''In'''dex}}) — техника индексации данных, предназначенная для обработки больших&lt;ref&gt;Больших в смысле количества строк, а не размера полей или абсолютного размера таблицы в байтах.&lt;/ref&gt; таблиц, в которых значение индексируемого сто...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=BRIN&amp;diff=12441&amp;oldid=prev"/>
		<updated>2023-05-04T23:23:44Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&amp;#039;&amp;#039;&amp;#039;BRIN&amp;#039;&amp;#039;&amp;#039; (от {{lang-en|&amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;lock &amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039;ange &amp;#039;&amp;#039;&amp;#039;In&amp;#039;&amp;#039;&amp;#039;dex}}) — техника индексации данных, предназначенная для обработки больших&amp;lt;ref&amp;gt;Больших в смысле количества строк, а не размера полей или абсолютного размера таблицы в байтах.&amp;lt;/ref&amp;gt; таблиц, в которых значение индексируемого сто...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''BRIN''' (от {{lang-en|'''B'''lock '''R'''ange '''In'''dex}}) — техника индексации данных, предназначенная для обработки больших&amp;lt;ref&amp;gt;Больших в смысле количества строк, а не размера полей или абсолютного размера таблицы в байтах.&amp;lt;/ref&amp;gt; таблиц, в которых значение индексируемого столбца имеет некоторую естественную корреляцию с физическим положением строки в таблице.&lt;br /&gt;
Они обладают такими качествами [[Секционирование|партиционированных]] таблиц, как быстрая вставка строки, быстрое создание индекса, без необходимости явного объявления партиций.&amp;lt;ref name=&amp;quot;Wong, 2014&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
|title=Loading Tables and Creating B-tree and Block Range Indexes&lt;br /&gt;
|date=2014-10-10&lt;br /&gt;
|author=Mark Wong&lt;br /&gt;
|website=AXLE project&lt;br /&gt;
|url=http://axleproject.eu/2014/10/10/loading-tables-and-creating-b-tree-and-block-range-indexes/&lt;br /&gt;
|access-date=2018-02-07&lt;br /&gt;
|archive-date=2016-03-04&lt;br /&gt;
|archive-url=https://web.archive.org/web/20160304051057/http://axleproject.eu/2014/10/10/loading-tables-and-creating-b-tree-and-block-range-indexes/&lt;br /&gt;
|deadlink=no&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Может использоваться для географических данных&amp;lt;ref&amp;gt;{{Cite web |url=https://2016.foss4g-na.org/sites/default/files/slides/gbroccolo_FOSS4GNA_PGDay2016_brin4postgis.pdf |title=Архивированная копия |accessdate=2017-08-07 |archiveurl=https://web.archive.org/web/20170807112303/https://2016.foss4g-na.org/sites/default/files/slides/gbroccolo_FOSS4GNA_PGDay2016_brin4postgis.pdf |archivedate=2017-08-07 |deadlink=yes }}&amp;lt;/ref&amp;gt;, [[Временной ряд|временных рядов]]&amp;lt;ref&amp;gt;{{Cite web |url=http://www.postgresql.fastware.com/blog/brin-indexes-what-are-they-and-how-do-you-use-them |title=BRIN indexes, what are they and how do you use them?&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2018-02-07 |archive-date=2018-02-08 |archive-url=https://web.archive.org/web/20180208123444/http://www.postgresql.fastware.com/blog/brin-indexes-what-are-they-and-how-do-you-use-them |deadlink=no }}&amp;lt;/ref&amp;gt;, логов или истории заказов магазина, которые пишутся последовательно, а потому некоторые колонки (дата, время, номер) частично упорядочены уже на физическом уровне, и в то же время таблицы с такими данными обычно разрастаются до гигантских размеров.&lt;br /&gt;
Ускоряет операторы сравнения, но не влияет на like-запросы.&amp;lt;ref&amp;gt;{{Cite web |url=https://www.postgresql.org/docs/9.5/static/brin-builtin-opclasses.html#BRIN-BUILTIN-OPCLASSES-TABLE |title=Table 62-1. Built-in BRIN Operator Classes |access-date=2017-08-07 |archive-date=2017-08-07 |archive-url=https://web.archive.org/web/20170807112039/https://www.postgresql.org/docs/9.5/static/brin-builtin-opclasses.html#BRIN-BUILTIN-OPCLASSES-TABLE |deadlink=no }}&amp;lt;/ref&amp;gt;. BRIN — не уникальный индекс&amp;lt;ref&amp;gt;{{Cite web |url=https://www.reddit.com/r/PostgreSQL/comments/3teoc1/when_should_i_use_brin_indexes/ |title=When should I use BRIN indexes? : PostgreSQL&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2018-02-08 |archive-date=2021-04-08 |archive-url=https://web.archive.org/web/20210408011047/https://www.reddit.com/r/PostgreSQL/comments/3teoc1/when_should_i_use_brin_indexes/ |deadlink=no }}&amp;lt;/ref&amp;gt;, поэтому не может использоваться в качестве индекса первичного ключа.&amp;lt;ref&amp;gt;{{Cite web |url=https://dba.stackexchange.com/questions/8814/how-to-promote-an-existing-index-to-primary-key-in-postgresql |title=How to promote an existing index to primary key in PostgreSQL - Database Administrators Stack Exchange&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2018-02-08 |archive-date=2018-02-09 |archive-url=https://web.archive.org/web/20180209063032/https://dba.stackexchange.com/questions/8814/how-to-promote-an-existing-index-to-primary-key-in-postgresql |deadlink=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BRIN-индексы были впервые предложены Alvaro Herrera из компании 2ndQuadrant в 2013 году под названием «Minmax-индексы». &lt;br /&gt;
Поддержка была заявлена в [[PostgreSQL]] с версии 9.5&amp;lt;ref&amp;gt;{{Cite web |url=https://www.postgresql.org/docs/9.5/static/release-9-5.html |title=PostgreSQL: Documentation: 9.5: Release 9.5&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2018-02-07 |archive-date=2018-03-09 |archive-url=https://web.archive.org/web/20180309052608/https://www.postgresql.org/docs/9.5/static/release-9-5.html |deadlink=no }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
В других СУБД есть похожие возможности, в том числе в [[Oracle Database|Oracle]]&amp;lt;ref name=&amp;quot;Oracle, Exadata Storage Indexes&amp;quot;&amp;gt;{{статья&lt;br /&gt;
|заглавие=Smart Scans Meet Storage Indexes&lt;br /&gt;
|издание=Oracle Magazine&lt;br /&gt;
|издательство=[[Oracle|Oracle Corporation]]&lt;br /&gt;
|ссылка=http://www.oracle.com/technetwork/issue-archive/2011/11-may/o31exadata-354069.html&lt;br /&gt;
|язык=und&lt;br /&gt;
|автор=Arup Nanda&lt;br /&gt;
|archivedate=2018-02-08&lt;br /&gt;
|archiveurl=https://web.archive.org/web/20180208010731/http://www.oracle.com/technetwork/issue-archive/2011/11-may/o31exadata-354069.html&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
|title=Oracle Sun Database Machine Application Best Practices for Data Warehousing&lt;br /&gt;
|id=1094934.1&lt;br /&gt;
|publisher=Oracle&lt;br /&gt;
|url=http://logicalread.solarwinds.com/storage-indexes-oracle-exadata-mc05/#.Vpjbp27fXU8&lt;br /&gt;
|access-date=2018-02-07&lt;br /&gt;
|archive-date=2016-03-15&lt;br /&gt;
|archive-url=https://web.archive.org/web/20160315051655/http://logicalread.solarwinds.com/storage-indexes-oracle-exadata-mc05/#.Vpjbp27fXU8&lt;br /&gt;
|deadlink=no&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;, [[Netezza]] («zone maps»), [[:en:Infobright]] («data packs»), [[:en:MonetDBand]], [[Apache Hive]] с ORC/Parquet.&lt;br /&gt;
&lt;br /&gt;
== Архитектура ==&lt;br /&gt;
&lt;br /&gt;
[[File:B-tree.svg|thumb|Структура индекса B-tree]]&lt;br /&gt;
[[File:BRIN index.svg|thumb|Структура индекса BRIN]]&lt;br /&gt;
&lt;br /&gt;
BRIN оперирует описаниями больших блоков данных, где хранится минимальное и максимальное значение индексируемого столбца внутри блока. Во время запросов сначала фильтруются блоки (условия запроса применяется к описанию блока). Таким образом, за небольшое число проверок сокращается набор данных, которые надо будет проверять построчно.&amp;lt;ref&amp;gt;{{Cite web |last1=Herrera |first1=Alvaro |date=2014-11-07 |title=commitdiff - BRIN: Block Range Indexes |url=https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=7516f5259411c02ae89e49084452dc342aadb2ae |website=git.postgresql.org |accessdate=2017-10-03 |archive-date=2019-01-19 |archive-url=https://web.archive.org/web/20190119193750/https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=7516f5259411c02ae89e49084452dc342aadb2ae |deadlink=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
СУБД PostgreSQL хранит данные в «страницах», каждая таблица или индекс — это последовательность страниц. Стандартный размер страницы — 8 килобайт.&amp;lt;ref&amp;gt;{{Cite web |url=https://www.postgresql.org/docs/8.0/static/storage-page-layout.html |title=PostgreSQL: Documentation: 8.0: Database Page Layout&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2018-02-07 |archive-date=2018-03-09 |archive-url=https://web.archive.org/web/20180309051021/https://www.postgresql.org/docs/8.0/static/storage-page-layout.html |deadlink=no }}&amp;lt;/ref&amp;gt; Блок или блоковый диапазон (англ. «a block range») — это группа страниц (а не строк), которые идут друг за другом в таблице. Блок в данном случае — часть индекса, а не таблицы: его размер можно определить в момент создания индекса параметром &amp;lt;code&amp;gt;pages_per_range&amp;lt;/code&amp;gt;.&amp;lt;ref&amp;gt;{{Cite web |url=https://www.postgresql.org/docs/9.5/static/brin-intro.html |title=PostgreSQL: Documentation: 9.5: Introduction&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2017-08-07 |archive-date=2017-08-07 |archive-url=https://web.archive.org/web/20170807112036/https://www.postgresql.org/docs/9.5/static/brin-intro.html |deadlink=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По мере того, как страницы наполняются данными, информация о блоках обновляется. Не каждой странице соответствует блок, недавно созданные страницы могут не иметь блока (создание новых блоков в индексе происходит, например, во время операции &amp;lt;code&amp;gt;VACUUM&amp;lt;/code&amp;gt; на таблице).&lt;br /&gt;
&lt;br /&gt;
BRIN настолько компактный, что может помещаться целиком в оперативную память, уменьшая количество дисковых операций во время запроса. Это не всегда справедливо для индексов B-tree, которые нуждаются в узле дерева на приблизительно каждые N строк таблицы, где N — вместимость одного узла. Размер индекса B-tree значителен и может быть сопоставим с объёмом данных в индексируемой колонке таблицы.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[GiST]] — индекс для like-запросов.&lt;br /&gt;
*Gin — еще один индекс для like-запросов. Он в 3 раза медленнее обновляется, чем GiST, но в 3 раза быстрее находит данные.&amp;lt;ref&amp;gt;{{Cite web|url=https://stackoverflow.com/a/28976555/1240328|title=Difference between GiST and GIN index|publisher=stackoverflow.com|accessdate=2018-04-11}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
{{википедия|BRIN}}&lt;br /&gt;
* [https://www.postgresql.org/docs/manuals/ PostgreSQL Documentation] {{Ref-en}}:&lt;br /&gt;
** [https://www.postgresql.org/docs/9.5/static/brin-intro.html Chapter 62. BRIN Indexes] ([https://postgrespro.ru/docs/postgrespro/9.5/brin-intro.html Глава 62. Индексы BRIN])&lt;br /&gt;
** [https://www.postgresql.org/docs/9.5/static/indexes-types.html 11.2. Index Types] &lt;br /&gt;
** [https://www.postgresql.org/docs/9.5/static/brin-builtin-opclasses.html#BRIN-BUILTIN-OPCLASSES-TABLE Table 62-1. Built-in BRIN Operator Classes]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Техники индексации данных]]&lt;br /&gt;
[[Категория:PostgreSQL]]&lt;/div&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
</feed>