SYSTEM_TIME pour
TABLESAMPLE #
Le module tsm_system_time fournit la méthode
d'échantillonnage de table SYSTEM_TIME, qui peut être
utilisé par la clause TABLESAMPLE d'une commande
SELECT.
Cette méthode d'échantillonnage d'une table accepte un unique argument, de type nombre à virgule flottante, correspondant au nombre maximum de millisecondes passé à lire la table. Ceci vous donne un contrôle direct sur la durée de la requête, au prix d'une taille d'échantillon difficile à prédire. Ce résultat contiendra autant de lignes qu'il a été possible d'en lire pendant la durée spécifiée, sauf si la table a pu être lue entièrement avant.
De la même façon que la méthode interne SYSTEM,
SYSTEM_TIME réalise un échantillonnage au niveau des
blocs de table, si bien que l'échantillonnage n'est pas complètement
aléatoire mais peut être sensible à un effet de regroupement (clustering),
surtout si un petit nombre de lignes est sélectionné.
SYSTEM_TIME ne supporte pas la clause
REPEATABLE.
Ce module est considéré comme « trusted », ce qui signifie qu'il
peut être installé par des utilisateurs simples (sans attribut
SUPERUSER) et qui ont l'attribut
CREATE sur la base de données courante.
Voici un exemple de sélection d'un échantillon d'une table avec
SYSTEM_TIME. Il faut tout d'abord installer
l'extension :
CREATE EXTENSION tsm_system_time;
Puis vous pouvez l'utiliser dans une commande SELECT,
par exemple :
SELECT * FROM ma_table TABLESAMPLE SYSTEM_TIME(1000);
Cette commande renverra autant de lignes de
ma_table qu'il a pu en lire en une seconde (1000
millisecondes). Bien sûr, si toute la table peut être lue en moins d'une
seconde, toutes les lignes seront renvoyées.