{"id":242999,"date":"2014-11-12T14:15:03","date_gmt":"2014-11-12T10:15:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=242999"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=242999","title":{"rendered":"<span class=\"post_title\">Postgres. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 N \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0434 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u0430\u0434\u0430\u0447\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\u0438\u0437 N \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c m (3-5) \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 k \u0432\u044b\u0431\u043e\u0440\u043e\u043a (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e k=2). <\/li>\n<\/ul>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c: \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e 3-5 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443:<\/p>\n<pre><code class=\"sql\"> SELECT *   FROM data_set   WHERE id NOT IN (1,2,3,4, 5)   ORDER BY random()   LIMIT 5; <\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u2026<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/google.com\/\">\u00ab\u0432\u044b\u0441\u0448\u0438\u043c \u0440\u0430\u0437\u0443\u043c\u043e\u043c\u00bb<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u043b <a href=\"http:\/\/postgresql.1045698.n5.nabble.com\/Performance-of-ORDER-BY-RANDOM-to-select-random-rows-td5766760.html\">\u043d\u0430\u043c\u0451\u043a \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/a>.<\/p>\n<pre><code class=\"sql\">WITH RECURSIVE r AS (      WITH b AS (SELECT min(id), max(id) FROM table1)      (          SELECT id, min, max, array[]::integer[] AS a, 0 AS n          FROM table1, b          WHERE id &gt; min + (max - min) * random()          LIMIT 1      ) UNION ALL (          SELECT t.id, min, max, a || t.id, r.n + 1 AS n          FROM table1 AS t, r          WHERE              t.id &gt; min + (max - min) * random() AND              t.id &lt;&gt; all(a) AND              r.n + 1 &lt; 10          LIMIT 1      )  )  SELECT t.id FROM table1 AS t, r WHERE r.id = t.id; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u2026 \u00ab\u0441\u043b\u0435\u0433\u043a\u0430\u00bb \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435. \u0410 \u0442\u0430\u0449\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043e\u0445\u043e\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0443\u0436\u0435 <a href=\"https:\/\/google.com\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c<\/a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0431\u0440\u0435\u0441\u0442\u0438 \u043d\u0430 \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/73700\/\">\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a>.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435. \u041b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0441\u0442\u0430\u043b\u0430 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439: n \u0440\u0430\u0437 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ID (primary key). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e N \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  \u041d\u043e \u00ab\u0433\u043b\u0430\u0434\u043a\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u0431\u0443\u043c\u0430\u0433\u0435\u00bb. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u043a\u0430\u043a \u0435\u0441\u0442\u044c\u00bb (\u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\/\u043f\u043e\u043b\u0435\u0439) \u0432\u0441\u043f\u043b\u044b\u043b\u0438 \u00ab\u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b\u00bb:<\/p>\n<ol>\n<li>\u041c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 4 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b. \u0421\u043a\u0430\u0436\u0435\u043c, \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 4-7 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 id==5. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 <b>UNION<\/b> \u0431\u043b\u043e\u043a\u0435 (\u0441\u0442\u0440\u043e\u0447\u043a\u0438 9-15) \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u044d\u0442\u0430\u043f\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 id==5, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 id \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 &quot;<b>\u0430<\/b>&quot; \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 13 \u00abt.id &lt;&gt; all(a)\u00bb \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e;<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u00ab\u0432\u044b\u0445\u043e\u0434\u0435\u00bb \u0431\u044b\u043b\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043e (\u0441\u0442\u0440. 14). \u041d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u2014 \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0431\u044b\u043b\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430\u0441\u044c \u043f\u0443\u0441\u0442\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u00ab0\u00bb). <\/li>\n<\/ol>\n<p>  \u0421 \u043f\u0435\u0440\u0432\u043e\u0439 \u00ab\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e\u00bb \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"sql\">SELECT id, min, max, array[]::integer[] || id AS a, 0 AS n  <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u043e\u0440\u0430\u0441\u043a\u0438\u043d\u0443\u0442\u044c \u043c\u043e\u0437\u0433\u0430\u043c\u0438. \u041f\u043e\u0434\u0432\u043e\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u00ab\u0441\u0435\u0440\u0434\u0446\u0435\u00bb \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"sql\">id &gt; min + (max - min) * random() <\/code><\/pre>\n<p>  \u041d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 <b>random()<\/b> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00ab1\u00bb, \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432:<\/p>\n<pre><code class=\"sql\">id &gt; max <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u0410 \u0435\u0436\u0435\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0442\u043e \u00ab\u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435\u00bb \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u043f\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0432\u0438\u0434\u0443:<\/p>\n<pre><code class=\"sql\">id &gt;= min + (max - min) * random() <\/code><\/pre>\n<p>  \u042d\u0442\u043e, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u041d\u043e \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0443\u043c\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043f\u044b\u0442\u043e\u043a, \u0438 \u043b\u0438\u0442\u0440\u043e\u0432 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%84%D0%B5\">\u0441\u0442\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u0432\u0435\u0442<br \/>  \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"sql\">WITH RECURSIVE r AS (  WITH b AS (    SELECT   min(t.id),   (    SELECT t.id    FROM table1 AS t    ORDER BY t.id DESC    LIMIT 1    OFFSET 9   ) max   FROM table1 AS t  )  (   SELECT     id, min, max, array[]::integer[] || id AS a, 0 AS n   FROM table1 AS t, b   WHERE     id &gt;= min + ((max - min) * random())::int   LIMIT 1  ) UNION ALL (   SELECT t.id, min, max, a || t.id, r.n + 1 AS n   FROM {table} AS t, r   WHERE    t.id &gt;= min + ((max - min) * random())::int AND    t.id &lt;&gt; all(a) AND    r.n + 1 &lt; 10   LIMIT 1  ) ) SELECT t.* FROM table1 AS t, r WHERE r.id = t.id <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u0441\u044f \u0441\u043e\u043b\u044c \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 5-11. \u0422.\u0435. \u0434\u0430\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u00ab\u0432\u044b\u0445\u043e\u0434\u0435\u00bb \u0431\u0443\u0434\u0435\u0442 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0447\u0442\u043e random N \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 \u0432\u0435\u0440\u043d\u0451\u0442 1. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c\/\u0438\u043c\u0435\u0442\u044c N-1 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0434 max. \u041a\u0430\u043a \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435? \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e ID \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u00ab\u0432\u043d\u0438\u0437\u00bb \u043d\u0430 N \u0441\u0442\u0440\u043e\u043a. \u0410 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 19 \u0438 25 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f &quot;&gt;=&quot;, \u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0435\u043d\u044c\u0448\u0435 (N-1).<\/p>\n<p>  \u0412\u043e\u0442 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u044b \u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u00ab\u043c\u0435\u043b\u043e\u0447\u0438\u00bb: \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u043c\u0430\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u041d\u0443\u0436\u043d\u043e \u0432\u0435\u0434\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 ID \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u043d\u0430\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 (is_active = true, is_deleted=false, &#8230;). \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u044b). \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a\u0430\u043a \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"sql\">WITH RECURSIVE r AS (  WITH b AS (    SELECT   min(t.{pk}),   (    SELECT t.{pk}    FROM {table} AS t    WHERE {exclude} t.is_active    ORDER BY t.{pk} DESC    LIMIT 1    OFFSET {limit} - 1   ) max   FROM {table} AS t WHERE {exclude} t.is_active  )  (   SELECT     t.{pk}, min, max, array[]::integer[] || t.{pk} AS a, 0 AS n   FROM {table} AS t, b   WHERE     t.{pk} &gt;= min + ((max - min) * random())::int AND     {exclude}     t.is_active   LIMIT 1  ) UNION ALL (   SELECT t.{pk}, min, max, a || t.{pk}, r.n + 1 AS n   FROM {table} AS t, r   WHERE    t.{pk} &gt;= min + ((max - min) * random())::int AND    t.{pk} &lt;&gt; all(a) AND    r.n + 1 &lt; {limit} AND    {exclude}    t.is_active   LIMIT 1  ) ) SELECT {fields} FROM {table} AS t, r WHERE r.{pk} = t.{pk} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0443\u0442 \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0437\u0430\u043c\u0435\u043d\u0435:<\/p>\n<ul>\n<li><b>{table}<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b;<\/li>\n<li><b>{pk}<\/b> \u2014 \u0438\u043c\u044f PrimaryKey-\u043f\u043e\u043b\u044f;<\/li>\n<li><b>{fields}<\/b> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 (\u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438 &quot;*&quot;);<\/li>\n<li><b>{exclude}<\/b> \u2014 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 (\u043d\u0430\u0431\u043e\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u0439) \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abt.id NOT IN (1,2,3,4)\u00bb;<\/li>\n<li><b>{limit}<\/b> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435<\/li>\n<\/ul>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u043d\u043e \u043d\u0435 \u043f\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043e\u0432\u0447\u0438\u043d\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u043a\u0438\u00bb? \u041a\u0430\u043a\u043e\u0432 \u00ab\u043f\u0440\u043e\u0444\u0438\u0442\u00bb \u043e\u0442 \u044d\u0442\u043e\u0439 \u043c\u043e\u0437\u0433\u043e\u043b\u043e\u043c\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438? \u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b.<\/p>\n<pre><code class=\"sql\">DROP TABLE IF EXISTS ttbl; CREATE TABLE IF NOT EXISTS ttbl (   id serial NOT NULL,   is_active BOOL NOT NULL DEFAULT true,   CONSTRAINT ttbl_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0435\u0451 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f id \u043d\u0435 \u0448\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0438\u043c\u0435\u043b\u0438 \u00ab\u0434\u044b\u0440\u043a\u0438\u00bb. \u0422.\u0435. \u043d\u0435 \u00ab1, 2, 3, 4, 5&#8230;\u00bb \u0430 \u0445\u043e\u0442\u044f-\u0431\u044b \u00ab1, 4, 5, 8&#8230;.\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043a.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import random  import psycopg2   DB_TABLE = 'ttbl' PK_NAME = 'id' DATABASES = {     'NAME': 'test_db',     'USER': 'user_test',     'PASSWORD': 'R#Q9Jw*ZEKWOhBX+EP|3\/xGkQn3',     'HOST': 'localhost',     'PORT': '', }  TOTAL = 10000000 current = 0 step = 10000 dev = 8 while current &lt;= TOTAL:     data = set()     for x in range(current, current+step, 10):         data.add(x + int(random.random() * dev))      x = cur.execute(         &quot;INSERT INTO {t_table} VALUES {t_items};&quot;.format(                 t_table=DB_TABLE,                 t_items='(' + '), ('.join(map(str, data)) + ')'         )     )     current += step     print(x, current)      cur.execute('COMMIT;')  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430 \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e \u0441\u043e\u0442\u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441 \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u00ab10\u00bb. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e, \u0442.\u043a. \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 0-dev. \u0422.\u0435. \u043f\u0440\u0438 \u0434\u0432\u0443\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 x \u00ab340\u00bb \u0438 \u00ab350\u00bb \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 340-348 \u0438 350-358 (342, 347, 340&#8230;; 351, 355, 358&#8230;).<\/p>\n<p>  \u0418\u0442\u043e\u0433\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c  <\/p>\n<pre><code class=\"sql\">select count(id) from ttbl; <\/code><\/pre>\n<p>  1001000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/p>\n<p>  \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043c \u0441\u0435\u0440\u0438\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432. \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u2014 \u0441\u0435\u0440\u0438\u044e \u0438\u0437 5 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0432\u0435\u0434\u0451\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441  <\/p>\n<pre><code class=\"sql\">select t.* from ttbl t where    t.id not in (1, 3, 10, 89, 99, 22, 24, 25, 28, 30)    AND t.is_active order by random() limit 5; <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:  <\/p>\n<table>\n<tbody>\n<tr>\n<th>\u2116 \u043f\/\u043f<\/th>\n<th>\u0432\u0440\u0435\u043c\u044f, ms<\/th>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>697<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>605<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>624<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>593<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>611<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043a\u043e\u043b\u043e<a href=\"#note1\">*<\/a> 600ms.<\/p>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u2014 \u00ab\u043c\u043e\u043d\u0441\u0442\u0440\u00bb.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u043d\u0441\u0442\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">.  <\/p>\n<pre><code class=\"sql\">WITH RECURSIVE r AS ( WITH RECURSIVE r AS (   WITH b AS (     SELECT     min(t.id),     (       SELECT t.id       FROM ttbl AS t       WHERE         t.id NOT IN (1, 3, 10, 89, 99, 22, 24, 25, 28, 30)         AND t.is_active       ORDER BY t.id DESC       LIMIT 1       OFFSET 5 - 1     ) max     FROM ttbl AS t     WHERE        t.id NOT IN (1, 3, 10, 89, 99, 22, 24, 25, 28, 30)       AND t.is_active   )   (     SELECT       id, min, max, array[]::integer[] || id AS a, 0 AS n     FROM ttbl AS t, b     WHERE       id &gt;= min + ((max - min) * random())::int AND       t.id NOT IN (1, 3, 10, 89, 99, 22, 24, 25, 28, 30) AND       t.is_active     LIMIT 1   ) UNION ALL (     SELECT t.id, min, max, a || t.id, r.n + 1 AS n     FROM ttbl AS t, r     WHERE       t.id &gt; min + ((max - min) * random())::int AND       t.id &lt;&gt; all( a ) AND       r.n + 1 &lt; 5 AND       t.id NOT IN (1, 3, 10, 89, 99, 22, 24, 25, 28, 30) AND       t.is_active     LIMIT 1   ) ) SELECT t.* FROM ttbl AS t, r WHERE r.id = t.id <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:  <\/p>\n<table>\n<tbody>\n<tr>\n<th>\u2116 \u043f\/\u043f<\/th>\n<th>\u0432\u0440\u0435\u043c\u044f, ms<\/th>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>15<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>17<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>12<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>12<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>  \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043a\u043e\u043b\u043e<a href=\"#note1\">*<\/a> 15ms.<\/p>\n<p>  \u0418\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (\u0432 40-50 \u0440\u0430\u0437). \u041e\u043d\u043e \u0442\u0430\u043a\u0438 \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u043b\u043e.<\/p>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u0432 \u0442.\u0447. \u0438 \u043f\u0440\u0438 \u00ab\u0445\u043e\u043b\u043e\u0434\u043d\u043e\u043c\u00bb \u0441\u0442\u0430\u0440\u0442\u0435 (\u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u0430\u0448\u0438\u043d\u044b\/\u0434\u0435\u043c\u043e\u043d\u0430). \u0418 \u0445\u043e\u0442\u044f \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c, \u043d\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c (\u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e). \u0422.\u0435. \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0440\u0430\u0437 \u0431\u044b\u043b \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u00ab\u0432 \u043b\u043e\u0431\u00bb.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h3>\n<p>  <a name=\"note1\"><\/a>*\u041e\u043a\u043e\u043b\u043e, \u0442.\u043a. \u0442\u043e\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u043b\u0438 \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0439, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u0435\u0448\u0435\u043c Postgres-\u0430, \u0432\u043b\u0438\u044f\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0436\u0435\u043b\u0435\u0437\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0438 \u0442.\u0434. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/242999\/\"> http:\/\/habrahabr.ru\/post\/242999\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0434 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0417\u0430\u0434\u0430\u0447\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\u0438\u0437 N \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c m (3-5) \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 k \u0432\u044b\u0431\u043e\u0440\u043e\u043a (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e k=2). <\/li>\n<\/ul>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c: \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e 3-5 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443:<\/p>\n<pre><code class=\"sql\"> SELECT *   FROM data_set   WHERE id NOT IN (1,2,3,4, 5)   ORDER BY random()   LIMIT 5; <\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u2026  <\/p>\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-242999","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/242999","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=242999"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/242999\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}