こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

検索キーの設定

お世話になっております。

INDEXを設定せずに、検索キーを設定するのですが、以下のデータ型によって検索速度の違いはあるのでしょうか?

CHAR(1)
VARCHAR2(1)
NUMBER(1)

また、内部でどのような動きをしているのか、説明が載っているようなHPがありましたら、併せてお教え頂けるとありがたいと思っております。
ご存知な方いらっしゃいましたら、宜しくご教授お願いします。

投稿日時 - 2005-04-21 14:15:23

QNo.1343758

暇なときに回答ください

質問者が選んだベストアンサー

CHARとVARCHAR2では、CHARの方が速いということで積極的にCHARを利用する方もいらっしゃいますが、Oracle社はCHARの利用をあまり推奨していません。

また、検索でこれらのデータ型の違いがパフォーマンスに大きく影響を与えることもありません。

結局のところ、扱いやすいデータ型を使うのがよいのではないでしょうか。

投稿日時 - 2005-04-22 10:16:22

ANo.8

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(8)

#4ですが..

確認しました。
どうも記憶違いしてたみたいですね。
varchar2だけを特別視する必要はなかったです。

勉強になりました。m(__)m

投稿日時 - 2005-04-22 02:27:08

ANo.6

GoF

#5です。
誤) 250Byte以下であればすべての型において1Byte,251Byteを超えると3Byteを
使用していると認識しています。


正)250Byte以下であればすべての型において1Byte,251Byte以上だと3Byteを
使用していると認識しています。

です。

投稿日時 - 2005-04-22 00:24:52

ANo.5

GoF

ご指摘を受けて、確認いたしましたが
VARCHAR(1)は 1Byteかと思います。

項目長はカラムヘッダが管理しており、データに含まれません。
250Byte以下であればすべての型において1Byte,251Byteを超えると3Byteを
使用していると認識しています。

参考URLにてご確認ください。

参考URL:http://otndnld.oracle.co.jp/skillup/oracle9i/3_1/index.html

投稿日時 - 2005-04-22 00:22:27

#2です。

#1&#3どの宛

NUBERの部分、当方の記憶違いです。(DATE型と取り違い)

NUMBER型 = (1 + 切捨て(格納時の桁数/2)) + 1

が正しいようです。(number(1)の場合、2バイト)

また、VARCHAR2(1)については、2バイトであっているハズです。
VARCHAR2は、可変バイトで記憶する仕組みのため、レングスを必ず管理します。
レングス部も、格納するデータ値で、1~2バイトの範囲で可変です。
VARCHAR2(1) の場合、1バイトのレングス部と1バイトのデータ値を
管理するので、記憶域として、2バイト消費します。

投稿日時 - 2005-04-21 23:48:48

ANo.3

GoF

#2さんへ
私の認識と異なるので、一応

CHAR(1) = 1バイト (CHAR(1 CHAR)では、また異なります)
VARCHAR2(1) = 1バイト
NUMBER(1) = 2バイト
(※ 負なら3バイトだが、上記2種は表現自体が不可能を考慮)
となると思います。

またレコード毎には、レコードヘッダ、列ヘッダが必要(~6Byte)となります。
そのためデータ自体の1Byteの差によるレスポンスへのインパクトは、ほとんどありません。

ちなみに、手元の覚書では
NUMBER(n) のサイズは CEIL (n/ 2)+1 +1 ( 最後の +1は負の場合のみ)
で桁数により可変となると思います。(間違っているかも)

投稿日時 - 2005-04-21 22:24:01

データ属性による記憶域の消費量は、
CHAR(1) = 1バイト
VARCHAR2(1) = 2バイト
NUMBER(1) = 7バイト
だったと記憶してます。

なので、1回の物理アクセスで取得できる量が多いのは
CHAR(1)である可能性が高いです。

ですが、実際の利用において、大きな差は生まれないと
思います。

投稿日時 - 2005-04-21 20:56:21

ANo.1

GoF

インデックスを使用しない検索は「テーブルフルアクセス」
になります。

テーブルフルアクセスは、検索項目の大きさよりも1レコードの大きさに左右されます。
ですから、通常のレベルでは、3つとタイプで差はでません。

オラクルの動作を知りたいのであれば

マニュアル「パフォーマンス・チューニング・ガイド」
・EXPLAIN PLAN の使用方法
を読んで実際のSQLで解析すると、理解できるようになると思います。

http://www.sint.co.jp/siob/
このあたりのツールを使用すると、実行計画も容易に見ることができます。

参考URL:http://otn.oracle.co.jp/document/products/oracle10g/101/doc_cd/index.htm

投稿日時 - 2005-04-21 16:41:36

あなたにオススメの質問