UNION ALLブランチへの結合の後付け - 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/uqf1592445067244.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

ファクト テーブルを、ファクト テーブル行の水平パーティションのUNION ALLビューとして表わすことは、一般に使用されている技術です。

これらのUNION ALLビューは、次の例のビューとそのビューに対するクエリーで示されているように、多くの場合は制約されたディメンション テーブルに結合されます。

     CREATE VIEW jan_feb_sales AS
     SELECT *
     FROM sales1
     UNION ALL
     SELECT *
     FROM sales2;

     SELECT SUM(quantity*amount) AS total
     FROM jan_feb_sales, product
     WHERE sales_product_key=product_key
     AND   product_name LIKE 'French%';

このUNION ALLの書き換えの例では、制約されたディメンション テーブルがある結合は、UNION ALLの各ブランチに後付けすることができます。この例を書き換えると次のようになります。

     SELECT SUM(quantity*amount) AS total
     FROM (SELECT quantity, amount
           FROM sales1, product
           WHERE sales_product_key=product_key
           AND   product_name LIKE 'French%'

     UNION ALL

     SELECT quantity, amount
     FROM sales2, product
     WHERE sales_product_key=product
     AND   product_name LIKE 'French%' ) AS jan_feb_sales ;

書き換えられたクエリーでは、スプールを作成する前に、制限された結合を使用して、sales1およびsales2からの行がフィルタされます。このため、ビューについてのスプールのサイズを減らすことができます。この書き換えはコスト ベースであり(コストベースの最適化を参照)、結合プランナーがクエリー リライト サブシステムによって呼び出されて、リクエストの元のバージョンまたは書き換えられたバージョンのどちらが効率的に実行できるかを判断します。