スケーラブルデータベースサーバ HiRDB Version 8 解説(Windows(R)用)
6.4 作業表用ファイル
HiRDBのマニュアルの記述読んでも???なんで。
1つのテーブルをSELECTした場合、
WHERE句 | ORDER BY句 | 一時作業表領域 |
なし | なし | 使わない |
あり(INDEX項目) | なし | 使わない |
なし | あり(INDEX項目) | 使わない |
あり(INDEX項目) | あり(INDEX項目) | 使わない |
あり(非INDEX項目) | なし | 使わない |
なし | あり(非INDEX項目) | 使う |
あり(非INDEX項目) | あり(非INDEX項目) | 使う |
あり(INDEX項目) | あり(非INDEX項目) | 使う |
あり(非INDEX項目) | あり(INDEX項目) | 使う |
動作的に、WHERE句はINDEXを使う/使わないかな?で変わるかな?とか思ったけど、
・WHERE句でINDEX項目で、LIKEの後方一致で検索すると「FULL SCAN」となる
・WHERE句で非INDEX項目で、等式で検索すると、「TABLE SCAN」となる
という点に違いがあるくらいで、一時作業表領域の使用する/しないに違いはなかった。
で、「FULL SCAN」と「TABLE SCAN」と全件検索の違いは…どこに書いてるんだろ(謎
それは置いといて、一時作業表領域の使用については、
・非INDEX項目でORDER BYすると必ず使用する
・INDEX項目でORDER BYしても、WHEREで非INDEX項目を使用すると必ず使用する
となると見える。
んで、SELECT文で一時作業表領域を使う場合ということで、
インデクスを定義した複数の列に検索条件を指定する場合
とあるけど、INDEX項目の2つのカラムをAND/ORで指定しても一時作業表領域を使ってないっぽいし???
インデクスを定義していない列に対してORDER BY句を指定する場合
とあるけど、非INDEX項目で抽出すると、インデックスを定義した列でソートしても一時作業表領域を使ってるっぽいし???
GROUP BY句を指定する場合
とあるけど、INDEX項目/非INDEX項目でGROUP BYしても一時作業表領域を使ってないっぽいし???
※としてパラレルサーバかシングルサーバかの違いと集合関数についてだけ書いてるけど、GROUP BYとは違うんかな???
ちなみに、ここの開発環境は体験版だから、シングルサーバだよねwww
サイズについては、SELECTするカラムと行数に依存(と思う)。
WHERE句の条件の数とは関係ない(っぽい)。
ORDEY BY句とGROUP BY句の項目の数は関係あるっぽい。
けど、計算式の中の2024とか4096という数字と関係があるようで、アプリケーションでORDER BYは最大10項目まで可能で、5項目と10項目でそれぞれ使用する一時作業表領域に差がなかったので、アプリケーションとしては関係ない(と思う)。
一応、1文字の240カラムくらいをORDER BYにしても、一時作業表領域が変化しなかったのは確認。
一時作業表領域は2[KB]or4[KB]単位で使うことになってて、カラム数×行数でリニアに変化する(ような気がする)。
カラム数は数100とかってあって、ORDEY BY句とGROUP BY句の項目数と比較すると想定の範囲内になるし。
スケールデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)
18.2.1 SQL文が使用する作業表用ファイルの容量