以下の SQL を実行する。
SELECT count (...) FROM "服"
WHERE サイズ = "M" OR 色 = "黒".
1. トラヴァーサル・テーブル
セット・アット・ア・タイム は、セット を単位として、「カラム (column、縦列) 単位」 に アクセス するので、上述の SQL を実行すれば、以下のような アクセス 経路を辿る。
(1) サイズ の カラム を走査 (scan) して、値が 「M」 である ROWID (002 と 003の 2つ) を得る。
(2) さらに、色の カラム を走査して、値が 「黒」 である ROWID (003) を得る。
複数の選択条件を──ここでは選言 (OR) であるが──、それぞれ単独に、カラム を走査すれば、検索結果として 3件の データ を得ることになるが、以下の 2つは同じ データ である。
(1) サイズ の カラム を走査して得た ROWID = 003
(2) 色の カラム を走査して得た ROWID = 003
セット・アット・ア・タイム 法は カラム 単位の アクセス を原則にしているので、複数の選択条件 (AND/OR) が記述されたなら、同一 ROW であるかどうかの検証をしなければならない。
同一 ROW の検証をするために、RDB は、一時的な作業域 (work-file) を用意する (生成する)。この作業域のことを 「トラヴァーサル・テーブル (traversal-table)」 という。
RDB は、(複合選択条件に対して) カラム を走査しながら検索結果を トラヴァーサル・テーブル に書き込んで、すべての検索が終わってから、トラヴァーサル・テーブル のなかに書き込まれた データ に対して同一 ROW の検証をする。
したがって、(トラヴァーサル・テーブル を生成して、同一 ROW の検証をすれば、) 資源が費消され、パフォーマンス は低下する。
言い換えれば、多量 データ を対象にして、「CREATE VIEW」 を使って複合検索を実行すれば パフォーマンス が悪いので、なんらかの対応をしなければならないということである (──対応策については、後日、記述する)。