--- title: "はじめに" url: https://docs.catalyst.zoho.com/ja/cloud-scale/help/nosql/indexing/introduction/ description: "Catalyst NoSQLは、非リレーショナル・非SQLのデータストレージ手段を提供するフルマネージドで強力なデータベースです。NoSQLテーブルでのデータの作成、管理、クエリを簡単に行い、Java、Node.js、PythonでCRUD操作を実行できます。" last_updated: 2026-02-23T12:39:41Z service: Cloud Scale type: general --- # NoSQLでのインデックス Catalyst NoSQLは、NoSQLテーブルにインデックスを作成する機能を提供しており、プライマリキーを使用せずにテーブルデータに対して代替クエリを実行できます。つまり、[パーティションキーとソートキー](https://docs.catalyst.zoho.com/ja/cloud-scale/help/nosql/components/#table-keys)以外の属性でセカンダリインデックスを作成・利用してデータアイテムを検索できます。 インデックスは、テーブル内の従来とは異なる属性を優先する必要があるシナリオで役立ち、データ取得操作に利便性と柔軟性を追加します。インデックスを使用したクエリは、データ読み取りプロセスを高速化し、効率を促進します。また、メインテーブルに影響を与えることなく、要件に基づいてテーブルのインデックスを変更または削除することもできます。 ### インデックスのアーキテクチャ Catalyst NoSQLのインデックスは、テーブル全体とテーブルデータが格納されているすべてのパーティションにまたがります。このクロスパーティションまたは**グローバルインデックス**機能は、テーブルのすべてのパーティションキーに対してクエリを実行できるため、非常に有益です。 Catalystでは、テーブルに最大20のインデックスを作成できます。作成する各インデックスに個別のパーティションキーとソートキーを設定できます。インデックスがグローバルであるため、メインテーブルで設定されたものとは異なるパーティションキーとソートキーを設定できます。 本質的に、インデックスはデータクエリのさまざまな要件に対応するために、異なるパーティションキーとソートキーで作成されたメインテーブルのコピーと見なすことができます。アーキテクチャの観点では、テーブルにインデックスが作成されると、メインテーブルと同じパーティショニングルールが適用された異なるストレージノードにそのコピーが格納されます。そのため、セカンダリインデックスに基づいてクエリを実行しても、テーブルのすべての属性とデータにアクセスできます。 > **注意:** ベーステーブルのデータを追加、更新、または削除すると、Catalystは自動的にインデックスを更新します。 ### インデックスの種類 Catalystは、NoSQLでテーブルをインデックスする3つの方法を提供しています: * **すべての属性のインデックス**: テーブル内のすべての属性のインデックスを作成します。このオプションを選択すると、Catalystは基本的にすべてのテーブル属性を複製し、インデックスに設定したパーティションキーに基づいて格納します。 * **キーのみのインデックス**: テーブル内のパーティションキー、ソートキー、および追加ソートキー属性(存在する場合)のみをインデックスします。これらのキー属性は、インデックスに設定したパーティションキーに基づいて格納されます。 * **特定の属性のインデックス**: 選択したテーブルの特定の属性をインデックスします。選択された属性は複製され、インデックスに設定したパーティションキーに基づいて格納されます。 インデックスに基づいてクエリを実行すると、テーブルとインデックスのパーティションキーおよびソートキー属性が、設定した種類に基づく他の属性とともに返されます。 例を使ってインデックスをよりよく理解しましょう。前のセクションで説明したMenuテーブルを更新して以下に示します。 #### サンプルテーブルの表現 **テーブル名**- Menu ```json { "item": { "Category": { "S": "Pizza" }, "DishName": { "S": "Vegan" }, "Calories": { "N": 350 }, "PreparationTime": { "N": 20 }, "DiscountPercentage": { "N": 12 }, "KeyIngredients": { "L": [ { "S": "Pizza Base" }, { "S": "Pizza Sauce" }, { "S": "Olives" }, { "S": "Bell Peppers" }, { "S": "Corn" }, { "S": "Onions" } ] } }, "item": { "Category": { "S": "Pizza" }, "DishName": { "S": "Chicken Overload" }, "Cost": { "N": 25 }, "DiscountPercentage": { "N": 15 }, "Calories": { "N": 450 }, "PreparationTime": { "N": 30 } }, "item": { "Category": { "S": "Sandwich" }, "DishName": { "S": "Vegan" }, "Calories": { "N": 300 }, "PreparationTime": { "N": 20 }, "Cost": { "N": 20 }, "DiscountPercentage": { "N": 10 } } } ``` > **注意:** ここに示されているテーブルは**CatalystカスタムJSON形式**の表現です。このJSON形式で各サーバーサイドSDKのデータを構築するフォーマットは異なります。このテーブルに示されているCatalystカスタムJSON形式の一般的な構文、サポートされるデータ型とその表記については、[このセクション](https://docs.catalyst.zoho.com/ja/cloud-scale/help/nosql/working-with-data/introduction/#the-catalyst-custom-json-format)を参照してください。 このテーブルに以下の設定で*Pricing*というインデックスを作成すると仮定します: * **パーティションキー**: `Cost` * **ソートキー**: `DiscountPercentage` * **インデックスの種類**: 特定の属性(`Calories`と`PreparationTime`) 以下は作成されたインデックスの表現です。 #### サンプルインデックスの表現 **インデックス名**- Pricing ```json { "item": { "Cost": { "N": 25 }, "DiscountPercentage": { "N": 15 }, "Category": { "S": "Pizza" }, "DishName": { "S": "Chicken Overload" } "Calories": { "N": 450 }, "PreparationTime": { "N": 30 } }, "item": { "Cost": { "N": 20 }, "DiscountPercentage": { "N": 10 }, "Category": { "N": "Sandwich" }, "DishName": { "N": "Vegan" }, "Calories": { "N": 300 }, "PreparationTime": { "N": 20 } } } ``` > **注意:** インデックスのパーティションキーを含まないデータアイテムは、インデックスの対象から除外されます。この例では、メインテーブルの「Pizza」と「Vegan」で識別されるアイテムは、インデックスのパーティションキーである`Cost`の値を含んでいないため、インデックスされていません。 インデックスPricingに基づいてクエリを実行すると、Catalystは属性`Cost`に対してアイテムを検索し、一致する結果が複数ある場合は属性`DiscountPercentage`に基づいて結果をソートします。選択された属性(`Calories`と`PreparationTime`)は、テーブルとインデックスのプライマリキーとともに、一致するアイテムのクエリで返されます。