4D v16.3

インデックスの作成と変更

ホーム

 
4D v16.3
インデックスの作成と変更

インデックスの作成と変更  


 

 

頻繁に検索や並び替えで使用されるフィールドに、インデックスを設定できます。例えば姓、会社名、製品名などフィールドを使用してレコードの検索や並び替えを行う場合、これらのフィールドにインデックスを設定することができます。またこのプロパティはテーブル間でのリレーションを確立するためにも使用されます。この点に関する詳細はリレーションの作成と変更を参照してください。

フィールドにインデックスが設定されると、4Dはそのフィールド用に内部的なインデックステーブルを作成します。このテーブルを使用して、4Dはそのフィールドに対する素早い検索や並び替えを実行します。インデックスが設定されていないフィールドを使用して検索や並び替えを行う場合、4Dはシーケンシャルにデータをロードし、レコード毎順番に評価します。インデックスを使用すれば、4Dはすべてのレコードを読み込むことなく検索や並び替えを行えます。

インデックスは文字、テキスト、日付、時間、整数、倍長整数、整数64bit、実数、フロート、ピクチャー、そしてオブジェクト型に設定できます。レコードの作成、変更、削除を行うと、4Dは自動でそのインデックステーブルを更新します。既に存在するフィールドにインデックスを作成すると、4Dは自動で既存のデータをインデックス化します。必要なだけフィールドにインデックスを設定できます。

各インデックステーブルの上限は次のとおりです:

  • 文字、テキスト、フロートインデックスのキー: 1280億
  • そのほかのインデックスタイプ (スカラーデータ) のキー: 2560億

すべてのフィールドにインデックスを設定するようなことはしないでください。インデックスはデータベースのサイズを増大させ、ディスク上のスペースを消費します。またインデックスを設定すればするほど、レコードの保存に時間を要するようになる点に留意してください。4Dはレコードを受け入れるたびにインデックステーブルを更新しなければならないためです。

データベースを上位バージョンに変換する際やデータ圧縮時など、特定の処理を行った際にもインデックスが再構築されます。

ストラクチャーエディター中で、インデックスが設定されたフィールドは太字で表示されます。

4Dでは3種類のインデックスタイプを提供しています。そのいずれを選択するかは一般的に期待する結果と、フィールドに現れるデータに基づきます。各インデックスタイプの説明は以下の通りです:

  • 標準インデックス: これは1つのフィールドで構成されるインデックスで、標準のデータベース処理 (検索や並び替え) の速度を向上するために使用します。4Dではさらにこのタイプのインデックスに対し、内部的な構造が異なるBツリーまたはクラスターBツリーを選択できます(ただしオブジェクトフィールドを除く)。
  • 復号インデックス: このインデックスは、しばしばともに検索条件に使用される (例えばLastName+FirstName) 2つ以上のフィールドの合成値を格納します。
  • キーワードインデックス: このインデックスは文字、テキストおよびピクチャーフィールドで使用できます。テキスト内部の検索を容易にする目的で使用されます。またピクチャーの場合は、ピクチャーに割り当てたキーワードで検索を行うために使用できます。

標準インデックスはデータベース処理の速度を向上する目的で使用されます(標準のインデックスは、キーワードインデックスやコンポジットインデックスとは異なり、一般のインデックスを参照します)。4Dは2つのタイプの標準インデックス、BツリーとクラスターBツリーを提供します。

  • Bツリー: 標準のBツリータイプインデックス。この汎用目的のインデックスはほとんどのインデックスの要件を満たします。
  • クラスターBツリー: クラスターを使用したBツリータイプのインデックス。このアーキテクチャーはインデックスに含まれるキーの量が少ない場合 (例えば同じ値がデータ中に繰り返し現れる場合) に有効です。

注: テキストタイプのフィールドに割り当てたBツリーインデックスは、フィールドの最初の1024文字 (最大) を格納します。そのため、1024文字を超える検索を、インデックスを使用して行うと失敗します。

インデックスアーキテクチャーの選択を容易にするために、自動オプションを選択できます。この場合4Dは自動でデータのタイプに応じインデックスのタイプを選択します。
オブジェクト型のフィールドでは、選択できるオプションは自動オプションのみです。この場合、全ての属性パスは自動的にインデックスされます。

複合インデックスでは、レコード毎に2つ以上のフィールドの値の合成値を格納します。よく見られる例はFirstName+LastNameフィールドの複合インデックスです。この場合、“Peter Smith”の検索は (まず“Smith”を検索し次に“Peter”を検索する) 標準の検索よりも速くなります。

4Dは検索や並び替えの際に自動で複合インデックスを利用します。例えば複合インデックス“City+ZipCode”が存在するとき、“lastname=carter & city=new york & zipcode =102@”のような検索を行うと、自動でその複合インデックスが利用されます。
ストラクチャーエディターでは、複合インデックスはインデックス作成ダイアログでのみ作成することができます。このダイアログボックスについては後述の“インデックスの作成”を参照してください。

キーワードインデックスは文字、テキスト、およびピクチャーフィールドに使用することができます。

  • 文字およびテキストフィールドでは特別なインデックス、キーワードインデックスを使用すると、フィールドに格納されたテキストは単語ごとにインデックス化されます。1文字や2文字の単語も含め、すべての単語がインデックス化されます。このタイプのインデックスはテキストフィールドのキーワードによる検索速度を劇的に向上させます。
    文字やテキストフィールドには標準のインデックスとキーワードインデックス両方を割り当てることができます (データがレコード内に保存されている場合)。4Dはコンテキストに応じて適切なインデックスを使用します。
  • ピクチャーフィールドにキーワードインデックスを使用すると、ピクチャーに割り当てられたキーワード (メタデータ) に対する検索が劇的に速くなります。
    警告: ピクチャーキーワードインデックスはIPTC/Keywordsタイプのメタデータを使用します。これらのタイプのメタデータは特にTIFFとJPEGでサポートされています (BMP、PNG、GIFではサポートされていません)。他のタイプのメタデータはインデックスでサポートされません。
    ピクチャーのキーワードインデックスは、ピクチャーフィールドが保存 (レコードが作成・更新される、ピクチャーが読み込まれるなど) されるたびにIPTC/Keywordsタイプのキーワードがあれば、4Dが自動で更新します。SET PICTURE METADATAを明示的に呼び出す必要はありません。

キーワードインデックスに含まれるキーワードのリストを取得するためにDISTINCT VALUESコマンドを使用できます。

テキストやピクチャーフィールドのキーワードインデックスは % 演算子で使用します。インデックスの値を明示的に使用するには、この演算子をクエリまたは並び替えフォーミュラで使用しなければなりません。例えば:

 QUERY([PICTURES];[PICTURES]Photos %"cats")
  // cats キーワードを持つ写真を探す

この書式はすべてのクエリおよび並び替えコマンドで同様に動作します : QUERY BY FORMULA, QUERY SELECTION, ORDER BY等。
% 演算子の動作については 4D ランゲージリファレンスマニュアル 比較演算子 を参照してください。

ストラクチャーエディターのツールバーにあるをクリックすると、インデックスリストウィンドウが表示されます。このウィンドウはタイプに関わらず、ストラクチャのすべてのインデックスを表示します:

ボタンはインデックスプロパティダイアログボックスを表示します。
ボタンは選択したインデックスを削除します(確認ダイアログが表示されます)。このボタンは特に複合インデックスを削除するために使用されます。
ツールボタンに割り当てられた2つのメニューを使用できます (インデックスが選択されている場合にのみ使用できます):

  • 編集: インデックスプロパティダイアログボックスに選択したインデックスのプロパティを表示します (次段落参照)。このダイアログはリスト中のインデックスをダブルクリックすることでも表示できます (名前エリアを除く)。
  • 再構築: 選択したインデックスを再構築するために使用されます。このコマンドを選択すると、確認ダイアログボックスが表示されます。

インデックスの作成方法はタイプにより異なります。さらにインデックスは直接あるいはダイアログを使用して作成できます。

標準のインデックスを直接作成する:

  1. フィールドを選択し、インスペクターパレットのインデックスメニューから選択します。
    または
    フィールドを右クリックし、コンテキストメニューのインデックス>サブメニューから選択します。
    ここでは以下の4つの選択肢から選べます(ただしオブジェクト型フィールドを除きます):
    • Bツリー: 標準のBツリータイプのインデックスを作成します。
    • クラスターBツリー: クラスターを使用するBツリータイプのインでクスを作成します。
    • 自動: 関連するデータに基づき、4Dがインデックスのアーキテクチャーを決定します。
    • なし: インデックスを設定しないか、既存のインデックスを取り除きます。

キーワードインデックスを直接作成する:

  1. 文字、テキストまたはピクチャーフィールドを選択し、インスペクターパレットの"キーワードインデックス"オプションにチェックを入れる。

    または
    フィールドを右クリックし、コンテキストメニューからインデックス>キーワードを選択します。 

複合インデックスを作成、あるいは他のタイプのインデックスをインデックス作成ダイアログで作成するには:

  1. テーブルのコンテキストメニューから新規インデックス...を選択するか、ストラクチャーエディターツールバーのオブジェクト追加メニューを使用して、インデックスオプションを選択します。
    または
    Ctrl (Windows) または Command (OS X) ボタンを押しながら複数のフィールドを選択し、うち一つのフィールドを右クリックしてコンテキストメニューから新規複合インデックス...を選択します。
    インデックス設定ダイアログが表示されます。このダイアログには以下の要素が含まれます:

    • テーブル: データベース中のすべてのテーブルのリスト。このメニューから、インデックスが属するテーブルを選択します。
    • 名称: インデックス名入力エリア。この名前は4Dランゲージコマンドで使用されます。
    • タイプ: 作成するインデックスのタイプを選択するメニュー。"自動"を選択すると、フィールドの内容に基づき、4Dが自動でインデックスタイプを決定します。
    • フィールドリスト: このエリアで、インデックスに割り当てるフィールドを指定します。ストラクチャーエディターでフィールドを選択していると、あらかじめそのフィールドがこのリストに設定されます。

インデックスにフィールドを追加するには ボタンをクリックします。選択したテーブルのフィールドリストが表示され、インデックスに追加するフィールドを指定できます。

  • 複合インデックスを作成するには、インデックスに含めるフィールドを複数選択します。フィールドリストが完成したら、矢印ボタンやドラッグ&ドロップを使用してフィールドの並びを変更できます。
  • 主キーフィールドをもとに複合インデックスを作成する場合、フィールドの並び順が主キーとインデックスとで同じ順番になるようにしてください。
  • “キーワードインデックス”タイプは文字やテキストフィールドタイプでのみ使用できます。またこの場合、1つのフィールドのみをインデックスに含めることができます。

インデックスからフィールドを削除するには、リスト中でそれを選択し、ボタンをクリックします。
インデックスの設定ができたら、OKボタンをクリックするとインデックスが生成されます。

利用しなくなったインデックスはいつでも削除できます。削除はストラクチャーエディター上で直接、またはインデックスリストウィンドウ上で行うことができます。インデックスリストウィンドウに関する詳細は、前述の"インデックスリスト"を参照してください。

標準インデックスを削除するには:

  1. 削除するインデックスが割り当てられているフィールドを選択し、インスペクターパレットのインデックスメニューからなしを選択します。
    または
  2. 削除するインデックスが割り当てられているフィールド上で右クリックし、コンテキストメニューからインデックス>なしを選択します。

キーワードインデックスを削除するには:

  1. 削除するインデックスが割り当てられているフィールドを選択し、インスペクターパレットの"キーワードインデックス"オプションのチェックを外します。
    または
  2. 削除するインデックスが割り当てられているフィールド上で右クリックし、コンテキストメニュー中のインデックス>キーワードを選択してチェック状態を解除します。

複合インデックスの削除はインデックスリストウィンドウのボタンを使用してのみ削除できます。

フィールドのインデックスをいつでも再構築できます。これは言い換えると、そのインデックスに対応するインデックステーブルを、現在のデータを使用して再構築することを意味します。これはアプリケーションメンテナンスの際に利用できます。

インデックスの再構築はインデックスリストウィンドウの再構築コマンドを使用して行います。

データ言語の変更 (テキスト比較参照) や、データ圧縮 (圧縮ページ参照)  などのメンテナンス処理においても、インデックスの再構築が行われることに留意してください。

 
プロパティ 

プロダクト: 4D
テーマ: データベースストラクチャーの作成

 
履歴 

 
ARTICLE USAGE

デザインリファレンス ( 4D v16)
デザインリファレンス ( 4D v16.1)
デザインリファレンス ( 4D v16.3)