例: 関数または式がSUBQUERYに指定されている場合は統計がコピーされない - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/spp1591731285373.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

このセットの例として、次のビュー定義を考えます。

    CREATE VIEW v1 (i, j) AS (
      SELECT x+1, b+1 
      FROM test);
    CREATE VIEW v3 (i, j) AS (SELECT CASE
                                     WHEN z1='abc' 
                                     THEN 1 
                                     ELSE 0, a1+1 
                              FROM test1);

Vantageは、subqueryに関数または式が指定されている場合には、それがどのような種類であっても、特定の列セットまたはインデックスの統計をコピーしません。これは、そのようなデータ操作は、これらの例が示すように、結果的に列セットまたはインデックス値のセットをソース リレーションとは異なる形に変換することになるためです。

例1

この例の場合、Vantageは、統計をコピーしません。これは、ビューv1は基礎となるtest表から列式を選択しているため、結果としてのターゲット テーブルt1の列がtestの列と異なるためです。

     CREATE TABLE t1 AS (SELECT *
                        FROM v1)
     WITH NO DATA AND STATISTICS;

例2

この例の場合、Vantageは、統計をコピーしません。これは、ビューv1は基礎となるtest表から列式を選択しているため、結果としてのターゲット テーブルの列データがtestの列と異なる可能性があるためです。ゼロ統計がコピーできないことにも注意が必要です。

    CREATE TABLE t5 AS (SELECT *
                        FROM v1) 
    WITH DATA AND STATISTICS;

例3

この例では、Vantageは統計をコピーしません。これは、ビューv3はCASE式を使用して定義されているため、結果としてのターゲット テーブルの列データがtest1の列と異なる可能性があるためです。

    CREATE TABLE t5 AS (SELECT *
                        FROM v3) 
    WITH DATA AND STATISTICS;

例4

この例では、Vantageは統計をコピーしません。これは、subqueryで指定された簡単な算術式によってターゲット テーブルのデータがtestの列と異なってしまうためです。

    CREATE TABLE t5 (c1, c2) AS (SELECT x+1, y+1
                                 FROM test) 
    WITH DATA AND STATISTICS;

例5

この例では、Vantageは統計をコピーしません。これは、subqueryで指定された簡単な算術式によってターゲット テーブルのデータがtest1の列と異なってしまうためです。

    CREATE TABLE t5 (c1, c2) AS (SELECT (k1/(y1+2)), b1+7
                                 FROM test1) 
    WITH DATA AND STATISTICS;

例6

この例では、Vantageは統計をコピーしません。これは、subqueryで指定された簡単な算術式によってターゲット テーブルのデータがtestの列と異なってしまうためです。

    CREATE TABLE t5 (a, b) AS (SELECT x+1 AS x, y+1 AS y
                               FROM test) 
    WITH DATA AND STATISTICS;