17. 17
Approximate Query Processing
3. MVIEWを用いたApprox処理の高速化向け機能拡張
y m d name1
2016 1 1 xx1
2016 1 1 xx2
2016 1 2 xx1
2016 1 2 xx3
2016 1 2 xx2
2016 1 3 xx1
2016 1 3 xx4
2016 1 3 xx1
2016 1 4 xx5
2016 1 4 xx6
y m d apx1
2016 1 1 (BLOB)
2016 1 2 (BLOB)
2016 1 3 (BLOB)
2016 1 4 (BLOB)
CREATE MATERIALIZED VIEW mv0_ymd AS
SELECT y, m, d,
APPROX_COUNT_DISTINCT_DETAIL(name1) apx1
FROM tbl0 GROUP BY y, m, d;
SELECT y, m, d,
TO_APPROX_COUNT_DISTINCT(apx1)
FROM mv0_ymd;
MVIEWとして事前
計算し独自BLOB形
式で保持
y m d cnt
2016 1 1 2
2016 1 2 3
2016 1 3 2
2016 1 4 2
SELECT y, m, d,
APPROX_COUNT_DISTINCT(name1) cnt
FROM tbl0 GROUP BY y, m, d;
問合せ結果 MVIEW
元データの表
元データの表に直接APPROX_COUNT_DISTINCT
を実行するのと同等
18. 18
Approximate Query Processing
y m d name1
2016 1 1 xx1
2016 1 1 xx2
2016 1 2 xx1
2016 1 2 xx3
2016 1 2 xx2
2016 1 3 xx1
2016 1 3 xx4
2016 1 3 xx1
2016 1 4 xx5
2016 1 4 xx6
y m d apx1
y m cnt
y m d cnt
y cnt
y m apx1
y apx1
CREATE MATERIALIZED VIEW mv0_ym
SELECT y, m,
APPROX_COUNT_DISTINCT_AGG(apx1) apx1
FROM mv0_ymd GROUP BY y, m;
SELECT y, m, d,
TO_APPROX_COUNT_DISTINCT(apx1)
FROM mv0_ymd;
元データの表
SELECT y,
TO_APPROX_COUNT_DISTINCT(apx1)
FROM mv0_y;
CREATE MATERIALIZED VIEW mv0_y
SELECT y,
APPROX_COUNT_DISTINCT_AGG(apx1) apx1
FROM mv0_ym GROUP BY y, m;
SELECT y, m,
TO_APPROX_COUNT_DISTINCT(apx1)
FROM mv0_ym;
MVIEW問合せ結果
CREATE MATERIALIZED VIEW mv0_ymd AS
SELECT y, m, d,
APPROX_COUNT_DISTINCT_DETAIL(name1) apx1
FROM tbl0 GROUP BY y, m, d;
30. 30
Data-Bound Collation
id str ・・・
A ・・・
a ・・・
A ・・・
12.1
NLS_COMP=LINGUISTIC
NLS_SORT=JAPANESE_M_CI
a → a → A → A
→ b → b → B → B
12.2 Data-Bound Collation
NLS_COMP=BINARY
NLS_SORT=BINARY
A → B → a → b
→ A → B → a → b
SELECT ... ORDER BY ...
SELECT ... ORDER BY ...
NLS_COMP=<XXX>
NLS_SORT=<XXX>
a → a → A → A
→ b → b → B → B
SELECT ... ORDER BY ...
CREATE TABLE tab1(
str VARCHAR2(10) COLLATE JAPANESE_M_CI);
ユーザー側で動的に
Collationを指定
データベース側で静的に
Collationを指定
原則無視される
(無視しない設定も可能ではある)
id str ・・・
A ・・・
a ・・・
A ・・・
32. 32
SQL*Plus Command History
DBA待望!のコマンド履歴機能
• readlineライブラリによる実装で
ないのが残念…
→ 今後もrlwrapのお世話になりそう…
• とはいえ、ツール追加ができない
カスタマ環境では助かる
– 事前にset hist onを実行する必要が
ある点に注意!
SQL> set hist on
SQL> select * from dual;
D
-
X
SQL> show user
USER is "SYS"
SQL> hist
1 select * from dual;
2 show user
SQL> hist 1 run
D
-
X