{"id":332434,"date":"2022-04-26T15:00:20","date_gmt":"2022-04-26T15:00:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=332434"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=332434","title":{"rendered":"<span>\u041f\u0441\u0441, \u043f\u0430\u0440\u0435\u043d\u044c\u2026 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0443\u0436\u0435\u043d?<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b0\/a41\/e0a\/0b0a41e0a6c8062848bd2a19ac519a5f.png\" alt=\"\u0418\u043d\u0434\u0435\u043a\u0441\u044b PostgreSQL \u043e\u043f\u0442\u043e\u043c \u0438 \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0443\" title=\"\u0418\u043d\u0434\u0435\u043a\u0441\u044b PostgreSQL \u043e\u043f\u0442\u043e\u043c \u0438 \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0443\" width=\"498\" height=\"365\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b0\/a41\/e0a\/0b0a41e0a6c8062848bd2a19ac519a5f.png\"\/><figcaption>\u0418\u043d\u0434\u0435\u043a\u0441\u044b PostgreSQL \u043e\u043f\u0442\u043e\u043c \u0438 \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0443<\/figcaption><\/figure>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0430\u0437\u044b: <em>&#171;\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u044b\u0441\u0442\u0440\u0435\u0435?&#187;<\/em>. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 &#8212; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/strong>. \u041d\u043e \u043a\u0443\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 &#171;\u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c&#187;, \u0434\u0430 \u0438 \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c?..<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u043d\u0430\u0448 <a href=\"https:\/\/explain.tensor.ru\/\">\u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u043e\u0432 PostgreSQL<\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0438 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u0445.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e &#8212; \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"\/ru\/post\/492694\/\">&#171;\u0420\u0435\u0446\u0435\u043f\u0442\u044b \u0434\u043b\u044f \u0445\u0432\u043e\u0440\u0430\u044e\u0449\u0438\u0445 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432&#187;<\/a>. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u043a\u043e\u0433\u0434\u0430 <em>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439<\/em> \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0418 &#171;\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439&#187; &#8212; \u0442\u0443\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 &#8212; \u043d\u0430\u0443\u043a\u0430 \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u0430. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438 \u0437\u0430\u0447\u0438\u0441\u0442\u0438\u0442\u044c, \u0443\u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"\/ru\/post\/488104\/\">&#171;DBA: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b&#187;<\/a>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u044b\u0445 \u0430\u0437\u043e\u0432, \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/using-explain\">EXPLAIN <\/a>\u0432\u0441\u0435 \u0443\u043c\u0435\u044e\u0442, \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>Seq Scan<\/code>, <code>Index Scan<\/code> \u0438 <code>Bitmap Index Scan<\/code> \u0437\u043d\u0430\u044e\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u0441\u0442\u043e\u0438\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/276973\/\">\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b<\/a> \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 <a href=\"http:\/\/www.depesz.com\/\"><em><u>Hubert &#8216;depesz&#8217; Lubaczewski<\/u><\/em><\/a>.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 #1: Seq Scan<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0438\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u0432\u0441\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>pg_class<\/code>, \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0435\u0435 \u043a\u043e\u043f\u0438\u0435\u0439:<\/p>\n<pre><code class=\"sql\">CREATE TABLE pg_class_copy AS TABLE pg_class;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0437\u0430 \u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043d\u0430\u0439\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 (sequence), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0432 \u0431\u0430\u0437\u0435:<\/p>\n<pre><code class=\"sql\">explain (analyze, buffers, costs off, verbose) SELECT oid FROM pg_class_copy WHERE relkind = 'S';<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0435\u0442, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u043b\u0430\u043d\u0435 <code>Seq Scan<\/code>:<\/p>\n<pre><code>Seq Scan on pg_class_copy (actual time=0.017..0.105 rows=2 loops=1)   Output: oid   Filter: (pg_class_copy.relkind = 'S'::\"char\")   Rows Removed by Filter: 427   Buffers: shared hit=11<\/code><\/pre>\n<p><code>Filter<\/code> &#8212; \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e PostgreSQL \u0438\u0437 429 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c 427 \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e 2. \u0418 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e &#8212; \u043c\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 <strong>\u0432 200 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e<\/strong> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439!<\/p>\n<h2>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438<\/h2>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043f\u043e\u043b\u044e\/\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e<\/h3>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u044f<\/strong> <code>pg_class_copy(relkind)<\/code>:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy USING btree(relkind);<\/code><\/pre>\n<p>\u0418 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0448\u043b\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 <code>Index Cond<\/code>, \u0430 \u0441\u0430\u043c \u0443\u0437\u0435\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 <code>Index Scan<\/code>:<\/p>\n<pre><code>Index Scan using pg_class_copy_relkind_idx on pg_class_copy (actual time=0.010..0.011 rows=2 loops=1)   Output: oid   Index Cond: (pg_class_copy.relkind = 'S'::\"char\")   Buffers: shared hit=2<\/code><\/pre>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c<\/h3>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0435 <strong>\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 WHERE-\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong>, \u0430 \u0435\u0433\u043e \u043f\u043e\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0441\u0443\u0449\u043d\u043e\u0435 &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0434 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <code>oid<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy USING btree(oid) -- \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u043b\u0435   WHERE relkind = 'S';                         -- \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0443\u0437\u0435\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 <code>Index Only Scan<\/code>, \u0430 \u0432\u043e\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 <strong>\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u0441\u0447\u0435\u0437\u043b\u043e \u0438\u0437 \u043f\u043b\u0430\u043d\u0430<\/strong> \u0432\u043e\u0432\u0441\u0435:<\/p>\n<pre><code>Index Only Scan using pg_class_copy_oid_idx on pg_class_copy (actual time=0.012..0.013 rows=2 loops=1)   Output: oid   Heap Fetches: 0   Buffers: shared hit=2<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 <code>Index [Only] Scan<\/code> &#8212; \u0432 <code>Seq Scan<\/code> \u043d\u0430\u043c \u0438 \u0442\u0430\u043a \u0432\u0438\u0434\u043d\u044b \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u0440\u0430\u0437\u0443, \u0430 \u0432 <code>Bitmap Heap Scan<\/code> \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <code>Recheck Cond<\/code>.<\/p>\n<h3>\u041d\u0435\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u043e \u0434\u0430\u043b\u0435\u043a\u043e <strong>\u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/strong>, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043a <code>IMMUTABLE<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/xfunc-volatility\">\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 <\/strong><code>IMMUTABLE<\/code><strong>-\u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/strong>, \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\">\u0423\u0441\u043b\u043e\u0432\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>idx<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= '2022-04-01 00:00:00'::timestamp<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts) \/ WHERE ...<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= $1::timestamp<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= (SubPlan 1)<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts = $1 OR ts = $2<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts IN ($1, $2)<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts = ANY(ARRAY[$1, $2])<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= now()<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= now() + '1 day'::interval  [1]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts - '1 day'::interval >= now()  [2]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts - '1 day'::interval)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts - now() >= '1 day'::interval  [3]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>---<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0430 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <code>(...) WHERE ts >= '2022-04-01 00:00:00'::timestamp<\/code>, \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0435-\u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0425\u043e\u0442\u044f \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b, \u043d\u043e&#8230;<\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>\u0432\u0442\u043e\u0440\u043e\u0439 <strong>\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong> \u0441 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>\u0442\u0440\u0435\u0442\u0438\u0439 <strong>\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d<\/strong> \u0438\u0437-\u0437\u0430 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 <code>now()<\/code> \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u0422\u0438\u043f\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h2>\n<p>\u041f\u043e\u043a\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e <code>btree<\/code> &#8212; \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 &#171;\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439&#187; \u0438\u0437 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types\">\u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 PostgreSQL \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;, \u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy(relkind);<\/code><\/pre>\n<p>\u041d\u043e <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types\">\u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 PostgreSQL \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435<\/a>, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 &#8212; \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u0435\u0439 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 <code>IMMUTABLE<\/code>-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 \u043d\u0438\u0445) \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;.<\/p>\n<h3>btree<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <strong>\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430<\/strong> (<code>&lt;, &lt;=, =, >=, ><\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435<\/strong> (<code>smallint, integer, bigint, numeric, real, double precision<\/code>)<\/p>\n<\/li>\n<li>\n<p><strong>\u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>date, time, time without time zone, time with time zone, timestamp, timestamp without time zone, timestamp with time zone<\/code>)<\/p>\n<\/li>\n<li>\n<p><code>uuid<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435<\/strong> (<code>varchar, text<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <strong>\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/strong> (<code>~&lt;~, ~&lt;=~, ~, ~>=~, ~>~<\/code>) \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-opclass\">\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a>:<\/p>\n<ul>\n<li>\n<p><strong>\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435<\/strong> (<code>varchar, text<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/330544\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>hash<\/h3>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435<\/strong> \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>=<\/code> , \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u0430\u043b\u043e\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/328280\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>gist<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-geometry\">\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439<\/a> (<code>&lt;&lt;, &amp;&lt;, &amp;>, >>, &lt;@, @>, ~=, &amp;&amp;, &lt;&lt;|, &amp;&lt;|, |&amp;>, |>>, ~, @<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>box, circle, poly, point<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-net\">\u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/a> (<code>&lt;&lt;, &lt;&lt;=, >>, >>=, =, &lt;>, &lt;, &lt;=, >, >=, &amp;&amp;<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/strong> (<code>inet<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-range\">\u0434\u043b\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432<\/a> (<code>=, &amp;&amp;, @>, &lt;@, &lt;&lt;, >>, &amp;&lt;, &amp;>, -|-<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435<\/strong> (<code>int4range, int8range, numrange<\/code>)<\/p>\n<\/li>\n<li>\n<p><strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>daterange, tsrange, tstzrange<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-textsearch\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a> (<code>&lt;@, @>, @@<\/code>) :<\/p>\n<ul>\n<li>\n<p><strong>FTS-\u0442\u0438\u043f\u044b<\/strong> (<code>tsquery, tsvector<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gist-builtin-opclasses#GIST-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/333878\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f<\/strong> <code>&lt;-><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 kNN-\u043f\u043e\u0438\u0441\u043a<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/btree-gist\">btree_gist<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u0442\u0438\u043f\u044b <code>btree<\/code><\/p>\n<\/li>\n<\/ul>\n<h3>spgist<\/h3>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435<\/strong> \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0438 \u0443 <code>gist<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f <\/strong><code>&lt;-><\/code>, \u043d\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gist-builtin-opclasses#GIST-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/337502\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>gin<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-array\">\u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432<\/a> (<code>&amp;&amp;, @>, &lt;@, =<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/strong> (<code>anyarray<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-json\">jsonb-\u043a\u043b\u044e\u0447\u0435\u0439<\/a> (<code>@>, @?, @@, ?, ?|, ?&amp;<\/code>):<\/p>\n<ul>\n<li>\n<p><code>jsonb<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-json#FUNCTIONS-SQLJSON-PATH\">jsonb-\u043f\u0443\u0442\u0435\u0439<\/a> (<code>@>, @?, @@<\/code>):<\/p>\n<ul>\n<li>\n<p><code>jsonb<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-textsearch\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a> (<code>@@, @@@<\/code>) :<\/p>\n<ul>\n<li>\n<p><code>tsvector<\/code><\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gin-builtin-opclasses#GIN-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/340978\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/btree-gin\">btree_gin<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u0442\u0438\u043f\u044b <code>btree<\/code><\/p>\n<\/li>\n<\/ul>\n<h3>brin<\/h3>\n<p>\u0411\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <code>btree<\/code>.<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong>, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 &#8212; \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <code>Bitmap Heap Scan<\/code>.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/346460\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>\u0418\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430;<\/p>\n<p>\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>btree<\/code>-\u0438\u043d\u0434\u0435\u043a\u0441, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441 <code>&lt;><\/code>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 <code>~>=~<\/code>, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 <code>text_pattern_ops<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430;<\/p>\n<p>\u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 <code>jsonb<\/code> &#8212; \u0442\u043e\u043b\u044c\u043a\u043e <code>gin<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c <code>&lt;, =, ><\/code> \u0438 <code>&lt;@<\/code> &#8212; \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <code>btree_gist\/btree_gin<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439;<\/p>\n<p>\u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430, \u0442\u043e <code>hash<\/code> \u0438 <code>spgist<\/code> \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<p>\u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e <code>brin<\/code> \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u043d\u0430\u044f \u0432\u0441\u0435 \u044d\u0442\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/3b2b6c45f60d9e7d6f31fb609f55a86e:0:2022-04-26#indexes\">\u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 explain.tensor.ru<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/232\/db6\/b96\/232db6b96482fc73570684b9209e31a9.png\" alt=\"\u042f\u0432\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\" title=\"\u042f\u0432\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\" width=\"538\" height=\"131\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/232\/db6\/b96\/232db6b96482fc73570684b9209e31a9.png\"\/><figcaption>\u042f\u0432\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441<\/figcaption><\/figure>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043f\u043e\u043b\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d14\/ea8\/e85\/d14ea8e85c571706d737229e3915e346.png\" alt=\"\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441\" title=\"\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441\" width=\"751\" height=\"322\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d14\/ea8\/e85\/d14ea8e85c571706d737229e3915e346.png\"\/><figcaption>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441<\/figcaption><\/figure>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b. \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 #2: BitmapAnd<\/h2>\n<p>\u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 <a href=\"\/ru\/post\/657895\/\">\u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 EAV-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439<\/a>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE tst_eav AS SELECT   (random() * 1e4)::integer e -- 10k \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 , (random() * 1e2)::integer a -- 100 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a , (random() * 1e2)::integer v -- 100 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 FROM   generate_series(1, 1e6);    -- 1M \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445  CREATE INDEX ON tst_eav(a); CREATE INDEX ON tst_eav(v);<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0434\u0432\u0443\u043c \u043a\u043b\u044e\u0447\u0430\u043c:<\/p>\n<pre><code class=\"sql\">explain (analyze, buffers, costs off) SELECT * FROM tst_eav WHERE a = 1 AND v = 1;<\/code><\/pre>\n<pre><code>Bitmap Heap Scan on tst_eav (actual time=1.495..1.603 rows=98 loops=1)   Recheck Cond: ((a = 1) AND (v = 1))   Heap Blocks: exact=97   Buffers: shared hit=119   ->  BitmapAnd (actual time=1.466..1.466 rows=0 loops=1)         Buffers: shared hit=22         ->  Bitmap Index Scan on tst_eav_a_idx (actual time=0.651..0.651 rows=10036 loops=1)               Index Cond: (a = 1)               Buffers: shared hit=11         ->  Bitmap Index Scan on tst_eav_v_idx (actual time=0.627..0.627 rows=9963 loops=1)               Index Cond: (v = 1)               Buffers: shared hit=11<\/code><\/pre>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 <code>Bitmap Index Scan<\/code> &#171;\u043d\u0430\u043c\u0435\u0442\u0438\u043b&#187; \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u043e 10K \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u043c \u0438\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0443\u0436\u043d\u043e 98. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 <code>Recheck Cond<\/code> &#8212; \u0442\u0430\u043c \u0434\u0432\u0430 <strong>\u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/strong> \u043a\u0430\u043a \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0441 <code>Seq Scan<\/code>:<\/p>\n<pre><code>(a, v) (a) WHERE v = 1 (v) WHERE a = 1 (?) WHERE a = 1 AND v = 1<\/code><\/pre>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 <strong>\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c<\/strong> \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0442\u0438\u043f\u043e\u0432\u043e\u0439:<\/p>\n<pre><code>Bitmap Heap Scan on tst_eav (actual time=0.036..0.117 rows=98 loops=1)   Recheck Cond: ((a = 1) AND (v = 1))   Heap Blocks: exact=97   Buffers: shared hit=100   ->  Bitmap Index Scan on tst_eav_a_v_idx (actual time=0.021..0.021 rows=98 loops=1)         Index Cond: ((a = 1) AND (v = 1))         Buffers: shared hit=3<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043c\u0435\u0441\u0442\u043e 22 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0432\u0441\u0435\u0433\u043e 3 &#8212; \u0438 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e!<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/1ced07a179df5139614f58e0ca74a196:0:2022-04-26#indexes\">\u0430\u0432\u0442\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 explain<\/a>?..<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/68f\/e8b\/8d9\/68fe8b8d92215f9d947e42cc6ef50ac6.png\" alt=\"\u0422\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 - \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\" title=\"\u0422\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 - \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\" width=\"752\" height=\"927\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68f\/e8b\/8d9\/68fe8b8d92215f9d947e42cc6ef50ac6.png\"\/><figcaption>\u0422\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 &#8212; \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/figcaption><\/figure>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u044e &#171;\u0446\u0435\u043f\u043e\u0447\u043a\u0443&#187; \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 #3: Limit &#8212; Sort &#8212; Scan<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0443\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441, \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c <code>v<\/code> \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e <code>a<\/code>:<\/p>\n<pre><code class=\"sql\">explain (analyze, buffers, costs off) SELECT * FROM tst_eav WHERE a = 1 ORDER BY v LIMIT 1;<\/code><\/pre>\n<pre><code>Limit (actual time=49.178..49.178 rows=1 loops=1)   Buffers: shared hit=3048 read=99   ->  Gather Merge (actual time=49.177..55.782 rows=1 loops=1)         Workers Planned: 2         Workers Launched: 2         Buffers: shared hit=5425 read=99         ->  Sort (actual time=30.746..30.746 rows=1 loops=3)               Sort Key: v               Sort Method: top-N heapsort  Memory: 25kB               Buffers: shared hit=5425 read=99               Worker 0:  Sort Method: top-N heapsort  Memory: 25kB               Worker 1:  Sort Method: top-N heapsort  Memory: 25kB               ->  Parallel Seq Scan on tst_eav (actual time=0.023..30.286 rows=3345 loops=3)                     Filter: (a = 1)                     Rows Removed by Filter: 329988                     Buffers: shared hit=5307 read=99<\/code><\/pre>\n<p>&#171;\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c&#187; <code>Seq Scan<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0441 \u0441\u043c\u0443\u0449\u0430\u0442\u044c, \u0438 \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f <code>a = 1<\/code> \u043c\u044b \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<pre><code>(a) (?) WHERE a = 1<\/code><\/pre>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c\u0441\u044f \u0432\u044b\u0448\u0435, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e <code>Sort<\/code>-\u0443\u0437\u0435\u043b \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043e\u043b\u044f\u0445: <code>Sort Key: v<\/code>. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0430\u043c \u043d\u0435 <strong>\u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/strong>?<\/p>\n<pre><code>(a, v) (v) WHERE a = 1<\/code><\/pre>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 <code>(a, v)<\/code> &#8212; \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u043e\u043d \u0436\u0435 \u043f\u043e\u043f\u0430\u043b \u0438 \u0432 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<pre><code>Limit (actual time=0.023..0.023 rows=1 loops=1)   Buffers: shared hit=4   ->  Index Scan using tst_eav_a_v_idx on tst_eav (actual time=0.021..0.021 rows=1 loops=1)         Index Cond: (a = 1)         Buffers: shared hit=4<\/code><\/pre>\n<p>\u041d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 2000 \u0440\u0430\u0437! \u041d\u043e \u043f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043d\u0430\u0434\u043e \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0435 &#8212; <strong>\u0432 \u043f\u043b\u0430\u043d\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/strong> \u043f\u043e <code>v<\/code> .<\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>=<\/code> \u0438\u043b\u0438 <code>IS NULL<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u0438\u043d\u0430\u0447\u0435 \u044d\u0442\u043e <a href=\"\/ru\/post\/488104\/\">\u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f <code>a > 1<\/code> &#8212; \u0443\u0432\u044b, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0434\u0430\u0441\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/2674afdb-1359-59c9-848e-2eae49d6ead8:0:2022-04-26#indexes\">\u043f\u0440\u0438\u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/229\/750\/f9c\/229750f9ce974b6269bc292d1034b913.png\" alt=\"\u041f\u0430\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f Limit - Sort - Scan\" title=\"\u041f\u0430\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f Limit - Sort - Scan\" width=\"748\" height=\"1021\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/229\/750\/f9c\/229750f9ce974b6269bc292d1034b913.png\"\/><figcaption>\u041f\u0430\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f Limit &#8212; Sort &#8212; Scan<\/figcaption><\/figure>\n<p>\u0418 \u043f\u0440\u044f\u043c\u043e-\u0442\u0430\u043a\u0438 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u0438!<\/p>\n<hr\/>\n<p>\u0410 \u0435\u0449\u0435 <a href=\"https:\/\/explain.tensor.ru\/\">explain.tensor.ru<\/a> \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430&#8230;<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/5435cd857f8c2a8882a6ad6e734413a6:0:2022-04-26\">\u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e worker&#8217;\u043e\u0432<\/a> \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u043f\u043b\u0430\u043d \u0438\u043c\u0435\u0435\u0442 <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/6dd70e7423fcf6f5865ea5302cef7b7b:0:2022-04-26\">\u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/a> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/25ab31029c4b6a885d42cfd42cbb3ab3:0:2022-04-26\">\u0432\u0440\u0435\u043c\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/a> \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0441\u0430\u043c\u043e \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u044b\u0445 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0433\u0434\u0435 \u0435\u0435 \u043b\u0443\u0447\u0448\u0435 \u0440\u0435\u0448\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>PREPARE<\/code><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/659889\/\"> https:\/\/habr.com\/ru\/company\/tensor\/blog\/659889\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><figcaption>\u0418\u043d\u0434\u0435\u043a\u0441\u044b PostgreSQL \u043e\u043f\u0442\u043e\u043c \u0438 \u0432 \u0440\u043e\u0437\u043d\u0438\u0446\u0443<\/figcaption><\/figure>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0430\u0437\u044b: <em>&#171;\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u044b\u0441\u0442\u0440\u0435\u0435?&#187;<\/em>. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 &#8212; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/strong>. \u041d\u043e \u043a\u0443\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 &#171;\u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c&#187;, \u0434\u0430 \u0438 \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c?..<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u043d\u0430\u0448 <a href=\"https:\/\/explain.tensor.ru\/\">\u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u043e\u0432 PostgreSQL<\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0438 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u0445.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e &#8212; \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"\/ru\/post\/492694\/\">&#171;\u0420\u0435\u0446\u0435\u043f\u0442\u044b \u0434\u043b\u044f \u0445\u0432\u043e\u0440\u0430\u044e\u0449\u0438\u0445 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432&#187;<\/a>. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u043a\u043e\u0433\u0434\u0430 <em>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439<\/em> \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0418 &#171;\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439&#187; &#8212; \u0442\u0443\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 &#8212; \u043d\u0430\u0443\u043a\u0430 \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u0430. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438 \u0437\u0430\u0447\u0438\u0441\u0442\u0438\u0442\u044c, \u0443\u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"\/ru\/post\/488104\/\">&#171;DBA: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b&#187;<\/a>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u044b\u0445 \u0430\u0437\u043e\u0432, \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/using-explain\">EXPLAIN <\/a>\u0432\u0441\u0435 \u0443\u043c\u0435\u044e\u0442, \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>Seq Scan<\/code>, <code>Index Scan<\/code> \u0438 <code>Bitmap Index Scan<\/code> \u0437\u043d\u0430\u044e\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u0441\u0442\u043e\u0438\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/276973\/\">\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b<\/a> \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0432 <a href=\"http:\/\/www.depesz.com\/\"><em><u>Hubert &#8216;depesz&#8217; Lubaczewski<\/u><\/em><\/a>.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 #1: Seq Scan<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0438\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u0432\u0441\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>pg_class<\/code>, \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0435\u0435 \u043a\u043e\u043f\u0438\u0435\u0439:<\/p>\n<pre><code class=\"sql\">CREATE TABLE pg_class_copy AS TABLE pg_class;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0437\u0430 \u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043d\u0430\u0439\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 (sequence), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0432 \u0431\u0430\u0437\u0435:<\/p>\n<pre><code class=\"sql\">explain (analyze, buffers, costs off, verbose) SELECT oid FROM pg_class_copy WHERE relkind = 'S';<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0435\u0442, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u043b\u0430\u043d\u0435 <code>Seq Scan<\/code>:<\/p>\n<pre><code>Seq Scan on pg_class_copy (actual time=0.017..0.105 rows=2 loops=1)   Output: oid   Filter: (pg_class_copy.relkind = 'S'::\"char\")   Rows Removed by Filter: 427   Buffers: shared hit=11<\/code><\/pre>\n<p><code>Filter<\/code> &#8212; \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e PostgreSQL \u0438\u0437 429 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c 427 \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e 2. \u0418 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e &#8212; \u043c\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 <strong>\u0432 200 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e<\/strong> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439!<\/p>\n<h2>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438<\/h2>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043f\u043e\u043b\u044e\/\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e<\/h3>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u044f<\/strong> <code>pg_class_copy(relkind)<\/code>:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy USING btree(relkind);<\/code><\/pre>\n<p>\u0418 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0448\u043b\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 <code>Index Cond<\/code>, \u0430 \u0441\u0430\u043c \u0443\u0437\u0435\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 <code>Index Scan<\/code>:<\/p>\n<pre><code>Index Scan using pg_class_copy_relkind_idx on pg_class_copy (actual time=0.010..0.011 rows=2 loops=1)   Output: oid   Index Cond: (pg_class_copy.relkind = 'S'::\"char\")   Buffers: shared hit=2<\/code><\/pre>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c<\/h3>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0435 <strong>\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 WHERE-\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong>, \u0430 \u0435\u0433\u043e \u043f\u043e\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0441\u0443\u0449\u043d\u043e\u0435 &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0434 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <code>oid<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy USING btree(oid) -- \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u043b\u0435   WHERE relkind = 'S';                         -- \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0443\u0437\u0435\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 <code>Index Only Scan<\/code>, \u0430 \u0432\u043e\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 <strong>\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u0441\u0447\u0435\u0437\u043b\u043e \u0438\u0437 \u043f\u043b\u0430\u043d\u0430<\/strong> \u0432\u043e\u0432\u0441\u0435:<\/p>\n<pre><code>Index Only Scan using pg_class_copy_oid_idx on pg_class_copy (actual time=0.012..0.013 rows=2 loops=1)   Output: oid   Heap Fetches: 0   Buffers: shared hit=2<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 <code>Index [Only] Scan<\/code> &#8212; \u0432 <code>Seq Scan<\/code> \u043d\u0430\u043c \u0438 \u0442\u0430\u043a \u0432\u0438\u0434\u043d\u044b \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u0440\u0430\u0437\u0443, \u0430 \u0432 <code>Bitmap Heap Scan<\/code> \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <code>Recheck Cond<\/code>.<\/p>\n<h3>\u041d\u0435\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u043e \u0434\u0430\u043b\u0435\u043a\u043e <strong>\u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/strong>, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043a <code>IMMUTABLE<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/xfunc-volatility\">\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 <\/strong><code>IMMUTABLE<\/code><strong>-\u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/strong>, \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\">\u0423\u0441\u043b\u043e\u0432\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>idx<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= '2022-04-01 00:00:00'::timestamp<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts) \/ WHERE ...<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= $1::timestamp<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= (SubPlan 1)<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts = $1 OR ts = $2<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts IN ($1, $2)<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts = ANY(ARRAY[$1, $2])<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= now()<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts >= now() + '1 day'::interval  [1]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts - '1 day'::interval >= now()  [2]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>(ts - '1 day'::interval)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"433\" width=\"433\">\n<p align=\"left\"><code>ts - now() >= '1 day'::interval  [3]<\/code><\/p>\n<\/td>\n<td data-colwidth=\"235\" width=\"235\">\n<p align=\"left\"><code>---<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0430 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <code>(...) WHERE ts >= '2022-04-01 00:00:00'::timestamp<\/code>, \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0435-\u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0425\u043e\u0442\u044f \u0432\u0441\u0435 \u0442\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b, \u043d\u043e&#8230;<\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>\u0432\u0442\u043e\u0440\u043e\u0439 <strong>\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong> \u0441 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>\u0442\u0440\u0435\u0442\u0438\u0439 <strong>\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d<\/strong> \u0438\u0437-\u0437\u0430 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 <code>now()<\/code> \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u0422\u0438\u043f\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h2>\n<p>\u041f\u043e\u043a\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e <code>btree<\/code> &#8212; \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 &#171;\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439&#187; \u0438\u0437 <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types\">\u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 PostgreSQL \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;, \u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"sql\">CREATE INDEX ON pg_class_copy(relkind);<\/code><\/pre>\n<p>\u041d\u043e <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-types\">\u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 PostgreSQL \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435<\/a>, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 &#8212; \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u0435\u0439 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 <code>IMMUTABLE<\/code>-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 \u043d\u0438\u0445) \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;.<\/p>\n<h3>btree<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <strong>\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430<\/strong> (<code>&lt;, &lt;=, =, >=, ><\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435<\/strong> (<code>smallint, integer, bigint, numeric, real, double precision<\/code>)<\/p>\n<\/li>\n<li>\n<p><strong>\u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>date, time, time without time zone, time with time zone, timestamp, timestamp without time zone, timestamp with time zone<\/code>)<\/p>\n<\/li>\n<li>\n<p><code>uuid<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435<\/strong> (<code>varchar, text<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <strong>\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/strong> (<code>~&lt;~, ~&lt;=~, ~, ~>=~, ~>~<\/code>) \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/indexes-opclass\">\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a>:<\/p>\n<ul>\n<li>\n<p><strong>\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435<\/strong> (<code>varchar, text<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/330544\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>hash<\/h3>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435<\/strong> \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>=<\/code> , \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u0430\u043b\u043e\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/328280\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>gist<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-geometry\">\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439<\/a> (<code>&lt;&lt;, &amp;&lt;, &amp;>, >>, &lt;@, @>, ~=, &amp;&amp;, &lt;&lt;|, &amp;&lt;|, |&amp;>, |>>, ~, @<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>box, circle, poly, point<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-net\">\u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/a> (<code>&lt;&lt;, &lt;&lt;=, >>, >>=, =, &lt;>, &lt;, &lt;=, >, >=, &amp;&amp;<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/strong> (<code>inet<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-range\">\u0434\u043b\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432<\/a> (<code>=, &amp;&amp;, @>, &lt;@, &lt;&lt;, >>, &amp;&lt;, &amp;>, -|-<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435<\/strong> (<code>int4range, int8range, numrange<\/code>)<\/p>\n<\/li>\n<li>\n<p><strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> (<code>daterange, tsrange, tstzrange<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-textsearch\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a> (<code>&lt;@, @>, @@<\/code>) :<\/p>\n<ul>\n<li>\n<p><strong>FTS-\u0442\u0438\u043f\u044b<\/strong> (<code>tsquery, tsvector<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gist-builtin-opclasses#GIST-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/333878\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f<\/strong> <code>&lt;-><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 kNN-\u043f\u043e\u0438\u0441\u043a<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/btree-gist\">btree_gist<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u0442\u0438\u043f\u044b <code>btree<\/code><\/p>\n<\/li>\n<\/ul>\n<h3>spgist<\/h3>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435<\/strong> \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0438 \u0443 <code>gist<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f <\/strong><code>&lt;-><\/code>, \u043d\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gist-builtin-opclasses#GIST-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/337502\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>gin<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-array\">\u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432<\/a> (<code>&amp;&amp;, @>, &lt;@, =<\/code>):<\/p>\n<ul>\n<li>\n<p><strong>\u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/strong> (<code>anyarray<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-json\">jsonb-\u043a\u043b\u044e\u0447\u0435\u0439<\/a> (<code>@>, @?, @@, ?, ?|, ?&amp;<\/code>):<\/p>\n<ul>\n<li>\n<p><code>jsonb<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-json#FUNCTIONS-SQLJSON-PATH\">jsonb-\u043f\u0443\u0442\u0435\u0439<\/a> (<code>@>, @?, @@<\/code>):<\/p>\n<ul>\n<li>\n<p><code>jsonb<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/functions-textsearch\">\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a> (<code>@@, @@@<\/code>) :<\/p>\n<ul>\n<li>\n<p><code>tsvector<\/code><\/p>\n<\/li>\n<\/ul>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/gin-builtin-opclasses#GIN-BUILTIN-OPCLASSES-TABLE\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/340978\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/14\/btree-gin\">btree_gin<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u0442\u0438\u043f\u044b <code>btree<\/code><\/p>\n<\/li>\n<\/ul>\n<h3>brin<\/h3>\n<p>\u0411\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <code>btree<\/code>.<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong>, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 &#8212; \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <code>Bitmap Heap Scan<\/code>.<\/p>\n<p>[\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: <a href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/346460\/\">\u043e\u0431\u0437\u043e\u0440<\/a>]<\/p>\n<h3>\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>\u0418\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430;<\/p>\n<p>\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>btree<\/code>-\u0438\u043d\u0434\u0435\u043a\u0441, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441 <code>&lt;><\/code>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 <code>~>=~<\/code>, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 <code>text_pattern_ops<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430;<\/p>\n<p>\u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 <code>jsonb<\/code> &#8212; \u0442\u043e\u043b\u044c\u043a\u043e <code>gin<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c <code>&lt;, =, ><\/code> \u0438 <code>&lt;@<\/code> &#8212; \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <code>btree_gist\/btree_gin<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439;<\/p>\n<p>\u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430, \u0442\u043e <code>hash<\/code> \u0438 <code>spgist<\/code> \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<p>\u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e <code>brin<\/code> \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u043d\u0430\u044f \u0432\u0441\u0435 \u044d\u0442\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/3b2b6c45f60d9e7d6f31fb609f55a86e:0:2022-04-26#indexes\">\u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 explain.tensor.ru<\/a>:<\/p>\n<figure class=\"full-width\"><figcaption>\u042f\u0432\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441<\/figcaption><\/figure>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u043f\u043e\u043b\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 btree-\u0438\u043d\u0434\u0435\u043a\u0441<\/figcaption><\/figure>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b. \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 #2: BitmapAnd<\/h2>\n<p>\u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 <a href=\"\/ru\/post\/657895\/\">\u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 EAV-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439<\/a>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE tst_eav AS SELECT   (random() * 1e4)::integer e -- 10k \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 , (random() * 1e2)::integer a -- 100 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a , (random() * 1e2)::integer v -- 100 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 FROM   generate_series(1, 1e6);    -- 1M \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445  CREATE INDEX ON tst_eav(a); CREATE INDEX ON tst_eav(v);<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0434\u0432\u0443\u043c \u043a\u043b\u044e\u0447\u0430\u043c:<\/p>\n<pre><code class=\"sql\">explain (analyze, buffers, costs off) SELECT * FROM tst_eav WHERE a = 1 AND v = 1;<\/code><\/pre>\n<pre><code>Bitmap Heap Scan on tst_eav (actual time=1.495..1.603 rows=98 loops=1)   Recheck Cond: ((a = 1) AND (v = 1))   Heap Blocks: exact=97   Buffers: shared hit=119   ->  BitmapAnd (actual time=1.466..1.466 rows=0 loops=1)         Buffers: shared hit=22         ->  Bitmap Index Scan on tst_eav_a_idx (actual time=0.651..0.651 rows=10036 loops=1)               Index Cond: (a = 1)               Buffers: shared hit=11         ->  Bitmap Index Scan on tst_eav_v_idx (actual time=0.627..0.627 rows=9963 loops=1)               Index Cond: (v = 1)               Buffers: shared hit=11<\/code><\/pre>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 <code>Bitmap Index Scan<\/code> &#171;\u043d\u0430\u043c\u0435\u0442\u0438\u043b&#187; \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u043e 10K \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u043c \u0438\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0443\u0436\u043d\u043e 98. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 <code>Recheck Cond<\/code> &#8212; \u0442\u0430\u043c \u0434\u0432\u0430 <strong>\u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/strong> \u043a\u0430\u043a \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0441 <code>Seq Scan<\/code>:<\/p>\n<pre><code>(a, v) (a) WHERE v = 1 (v) WHERE a = 1 (?) WHERE a = 1 AND v = 1<\/code><\/pre>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 <strong>\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c<\/strong> \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0442\u0438\u043f\u043e\u0432\u043e\u0439:<\/p>\n<pre><code>Bitmap Heap Scan on tst_eav (actual time=0.036..0.117 rows=98 loops=1)   Recheck Cond: ((a = 1) AND (v = 1))   Heap Blocks: exact=97<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-332434","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=332434"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332434\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=332434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=332434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=332434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}