背景说明

Oracle会使用到Sample的语法进行采样查询,例如:select * from AAA sample block(name)

解决方案

PolarDB支持使用TABLESAMPLE system(参数),TABLESAMPLE bernoulli(参数) 这两种方式的采样查询。

BERNOULLI以及SYSTEM采样方法传入的参数表示采样表的百分数,取值范围为0-100。BERNOULLI方法扫描整个表并且用指定的几率选择或者忽略行。SYSTEM方法会做块层的采样,每个块都有指定的机会能被选中,被选中块中的所有行都会被返回。在指定较小的采样百分数时,SYSTEM方法要比BERNOULLI方法快很多,但是前者可能由于聚簇效应返回随机性较差的表采样。

示例

canno=> create table a(id int);
CREATE TABLE

canno=> insert into a select generate_series(1,1000000);
INSERT 0 1000000

canno=> select count(1) from a tablesample system(1);
 count
-------
  8510
(1 row)

canno=> select count(1) from a tablesample bernoulli(1);
 count
-------
 10004
(1 row)