2016-05-17 31 views

回答

0

如果9.5或更高版本,可以使用TABLESAMPLE

TABLESAMPLE sampling_method (argument [, ...]) [ REPEATABLE (seed) ] 

根据文档:

一个表名后TABLESAMPLE子句指示指定 sampling_method应该用于检索的一个子集 表中的行。此采样先于任何其他 过滤器(如WHERE子句)的应用。标准的PostgreSQL发行版 包括两种采样方法,BERNOULLI和SYSTEM,以及其他采样方法可以通过扩展安装在数据库中。

伯努利和SYSTEM采样方法的每一个接受单个 参数,它是表中的采样部分,表示为0和100之间的 百分比此参数可以是任何实值 表达。 (其他抽样方法可能会接受更多或不同的参数。)这两种方法每个都会返回一个随机选择的样本表,其中包含表格行的大约指定百分比的 。 BERNOULLI方法扫描整个表并且 选择或忽略具有指定的 概率的独立行。 SYSTEM方法对每个 块都进行块级抽样,该块具有指定的选择机会;返回每个 选定块中的所有行。当指定小采样百分比 时,SYSTEM方法比BERNOULLI方法快得多,但它可能会返回表的随机性较小的样本作为聚类效应的结果 。

可选的REPEATABLE子句指定用于在采样方法内生成随机数的种子编号或表达式 。 种子值可以是任何非空的浮点值。 指定相同的种子和参数值的两个查询将选择该表的同一个样本 ,如果该表尚未同时更改的话。但是不同的种子值通常会产生不同的样本。如果没有给出 REPEATABLE,则为每个 查询选择一个新的随机样本。请注意,某些附加采样方法不接受REPEATABLE,并且每次使用时都会生成新的采样。

链接:从博客http://www.postgresql.org/docs/current/static/sql-select.html

详细介绍功能:http://blog.2ndquadrant.com/tablesample-in-postgresql-9-5-2/