第175回 CLUB DB2「アクセスプラン(実行計画)の読み方入門」の資料です。
https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/ClubDB2/page/%E7%AC%AC175%E5%9B%9E
6. 正しいデータ型を使う
〜 配列の操作の場合 〜
a = Array.new
# 要素の挿入
a.push(' 要素 ')
# N 番目の要素
a[N]
a = ''
# 要素の挿入
a = a << (a.size == 0 ? ' 要
素 ' : ', 要素 '
# N 番目の要素
n = 0
s = ''
a.each_char do |c|
if c == ','
return s if n == N
n += 1
s = ''
else
s << c
end
end
return s if n == N
7. 正しいデータ型を使う
〜 配列の操作の場合 〜
a = Array.new
# 要素の挿入
a.push(' 要素 ')
# N 番目の要素
a[N]
a = ''
# 要素の挿入
a = a << (a.size == 0 ? ' 要
素 ' : ', 要素 '
# N 番目の要素
n = 0
s = ''
a.each_char do |c|
if c == ','
return s if n == N
n += 1
s = ''
else
s << c
end
end
return s if n == N
112. 隣接リストモデル
●
一般グラフと同じように隣接リストを使って表現する
–
–
●
子ノードが親ノードの ID を持つ
根ノードの親は NULL
再帰クエリあるいはストアドプロシージャ
node_id
Q: f の深さはいくつか?
WITH RECURSIVE r AS (
SELECT 1 AS level, node_id, parent_id
FROM Tree
WHERE parent_id IS NULL
UNION ALL
SELECT r.level + 1, t.node_id, t.parent_id
FROM r JOIN Tree t
ON r.node_id = t.parent_id)
SELECT * FROM r WHERE node_id = 'f';
parent_id
a
NULL
b
a
c
a
d
a
e
b
f
b
g
c
h
g
115. 入れ子集合モデル
lft と rgt による表現
10
3
2
1
4
6
5
e
f
9
7
h
g
8
b
11
12
13 14
c
15
d
16
a
Q: b の子孫をすべて挙げよ
SELECT t1.node_id FROM Tree t1 JOIN Tree t2
WHERE t2.node_id = 'b'
AND t1.lft BETWEEN t2.lft AND t2.rgt
node_id
lft
rgt
a
1
16
b
2
7
c
8
13
d
14
15
e
3
4
f
5
6
g
9
12
h
10
11