• ベストアンサー

検索キーの設定

お世話になっております。 INDEXを設定せずに、検索キーを設定するのですが、以下のデータ型によって検索速度の違いはあるのでしょうか? CHAR(1) VARCHAR2(1) NUMBER(1) また、内部でどのような動きをしているのか、説明が載っているようなHPがありましたら、併せてお教え頂けるとありがたいと思っております。 ご存知な方いらっしゃいましたら、宜しくご教授お願いします。

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.8

CHARとVARCHAR2では、CHARの方が速いということで積極的にCHARを利用する方もいらっしゃいますが、Oracle社はCHARの利用をあまり推奨していません。 また、検索でこれらのデータ型の違いがパフォーマンスに大きく影響を与えることもありません。 結局のところ、扱いやすいデータ型を使うのがよいのではないでしょうか。

その他の回答 (7)

回答No.7

#4ですが.. 確認しました。 どうも記憶違いしてたみたいですね。 varchar2だけを特別視する必要はなかったです。 勉強になりました。m(__)m

  • GoF
  • ベストアンサー率37% (34/91)
回答No.6

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

  • GoF
  • ベストアンサー率37% (34/91)
回答No.5

ご指摘を受けて、確認いたしましたが VARCHAR(1)は 1Byteかと思います。 項目長はカラムヘッダが管理しており、データに含まれません。 250Byte以下であればすべての型において1Byte,251Byteを超えると3Byteを 使用していると認識しています。 参考URLにてご確認ください。

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

#2です。 #1&#3どの宛 NUBERの部分、当方の記憶違いです。(DATE型と取り違い) NUMBER型 = (1 + 切捨て(格納時の桁数/2)) + 1 が正しいようです。(number(1)の場合、2バイト) また、VARCHAR2(1)については、2バイトであっているハズです。 VARCHAR2は、可変バイトで記憶する仕組みのため、レングスを必ず管理します。 レングス部も、格納するデータ値で、1~2バイトの範囲で可変です。 VARCHAR2(1) の場合、1バイトのレングス部と1バイトのデータ値を 管理するので、記憶域として、2バイト消費します。

  • GoF
  • ベストアンサー率37% (34/91)
回答No.3

#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は負の場合のみ) で桁数により可変となると思います。(間違っているかも)

回答No.2

データ属性による記憶域の消費量は、 CHAR(1) = 1バイト VARCHAR2(1) = 2バイト NUMBER(1) = 7バイト だったと記憶してます。 なので、1回の物理アクセスで取得できる量が多いのは CHAR(1)である可能性が高いです。 ですが、実際の利用において、大きな差は生まれないと 思います。

  • GoF
  • ベストアンサー率37% (34/91)
回答No.1

インデックスを使用しない検索は「テーブルフルアクセス」 になります。 テーブルフルアクセスは、検索項目の大きさよりも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