TABLESAMPLE 的 SYSTEM_TIME 采样方法 #
tsm_system_time 模块提供表采样方法 SYSTEM_TIME,该方法可用于 SELECT 命令的 TABLESAMPLE 子句。
该表采样方法接受一个浮点数参数,表示读取表所花费的最大毫秒数。这让你能直接控制查询耗时,代价是样本大小变得难以预测。所得样本将包含在指定时间内能读取的尽可能多的行;如果整个表先被读完,则包含全部行。
与内置的 SYSTEM 采样方法一样,SYSTEM_TIME 执行块级采样,因此样本并非完全随机,可能受到聚簇效应的影响,在仅选中少量行时尤为明显。
SYSTEM_TIME 不支持 REPEATABLE 子句。
该模块被视为“可信”模块,也就是说,拥有当前数据库 CREATE 权限的非超级用户也可以安装它。
下面是使用 SYSTEM_TIME 对表进行采样的示例。首先安装扩展:
CREATE EXTENSION tsm_system_time;
然后即可在 SELECT 命令中使用,例如:
SELECT * FROM my_table TABLESAMPLE SYSTEM_TIME(1000);
该命令将返回 my_table 在 1 秒(1000 毫秒)内能读取的尽可能大的样本。当然,如果整个表能在 1 秒内读完,则返回其所有行。