TABLESAMPLE
に対するSYSTEM_TIME
サンプリングメソッド #
tsm_system_time
モジュールはSYSTEM_TIME
というテーブルサンプリングメソッドを提供します。
これはSELECT
コマンドのTABLESAMPLE
句で利用できます。
このテーブルサンプリングメソッドはテーブルを読み込みのに消費する最大ミリ秒を指定する浮動小数点の引数を1つ取ります。 これにより、サンプルのサイズを予測するのが難しくなる代わりに、問い合わせに要する時間に関する直接的な制御が得られます。 結果のサンプルには、指定した時間内に読み込めただけの数の行が含まれます。 ただし、テーブル全体を先に読み終わった時は除きます。
組み込みのSYSTEM
サンプリングメソッドと同様、SYSTEM_TIME
はブロックレベルのサンプリングを行うため、サンプルは完全にはランダムではなく、特にごく少数の行がSELECTされたときはクラスタリングの影響を受けます。
SYSTEM_TIME
はREPEATABLE
句をサポートしません。
このモジュールは「trusted」と見なされます。つまり、現在のデータベースに対してCREATE
権限を持つ非スーパーユーザがインストールできます。
以下にSYSTEM_TIME
を使ってテーブルのサンプルをSELECTする例を示します。
まず、拡張をインストールします。
CREATE EXTENSION tsm_system_time;
これで、例えば以下のようにSELECT
コマンドを使うことができます。
SELECT * FROM my_table TABLESAMPLE SYSTEM_TIME(1000);
このコマンドは1秒(1000ミリ秒)の間にmy_table
から読み込めるだけのサンプルを返します。
もちろん、テーブル全体が1秒いないに読み込めるときは、すべての行が返されます。