第 3 章 クエリと削除の最適化
•クエリ内の集合関数でDISTINCT が指定されていない場合に、分割GROUP BY によってクエリのパフォーマンスが向上する可能性があります。次の クエリでは SUM DISTINCT を使用しているため、分割 GROUP BY による メリットはありません。
CREATE VIEW viewA (va1 int, va2 int, va3 int, va4 int) AS
SELECT b1, b2, b3, b4 FROM tableB
UNION ALL
SELECT c1, c2, c3, c4 FROM tableC;
SELECT SUM(DISTINCT va1) FROM viewA GROUP BY va3;
•分割 GROUP BY によってクエリのパフォーマンスを向上させるには、追 加の GROUP BY 演算子の処理に使われる集合情報とデータを格納するた めに、テンポラリ共有バッファ・キャッシュに十分なメモリが必要です。
CREATE VIEW viewA (va1 int, va2 int, va3 int,
va4 int) AS | tableB |
SELECT b1, b2, b3, b4 FROM | |
UNION ALL | tableC |
SELECT c1, c2, c3, c4 FROM | |
UNION ALL | tableD |
SELECT d1, d2, d3, d4 FROM | |
UNION ALL | tableE |
SELECT e1, e2, e3, e4 FROM | |
UNION ALL | tableF |
SELECT f1, f2, f3, f4 FROM | |
UNION ALL | tableG; |
SELECT g1, g2, g3, g4 FROM | |
SELECT SUM(va1) FROM viewA | GROUP BY va3; |
この例では、Sybase IQ オプティマイザが GROUP BY を分割し、6 個の GROUP BY 演算子をクエリ・プランに挿入しています。これにより、集 合情報とデータを格納するために、クエリにより多くのテンポラリ・ キャッシュが必要となります。システムが十分なキャッシュを割り付けら れない場合、オプティマイザは GROUP BY を分割しません。
メモリに空きがある場合は、TEMP_CACHE_MEMORY_MB データベー ス・オプションを使用してテンポラリ・キャッシュのサイズを増やす ことができます。バッファ・キャッシュのサイズの設定方法について は、『Sybase IQ リファレンス・マニュアル』の「データベース・オプショ ン」の「バッファ・キャッシュ・サイズの決定」(107 ページ ) および 「TEMP_CACHE_MEMORY_MB オプション」を参照してください。
パフォーマンス&チューニング・ガイド | 33 |