戻る

オブジェクトスキーマ(テーブル)のインデックス追加
オブジェクトスキーマのレコードに高速で検索可能なキー(インデックス)の定義を追加

オブジェクトスキーマにデータを登録したとします。
検索したいデータを取り出すために検索しやすいように
インデックスとよばれる定義を追加すると検索結果のレスポンスが良くなることがあります。
このインデックスの定義を追加するサンプルです。
uniqueの種類truefalse
重複の可否インデックスのキーの値が
一意であることを強制します。
既存の値と同じ同じーを持つレコードを
追加しようとするとエラーになります。
インデックスのキーの値が
重複しても問題ありません。
目的distinctのように一意なキーのリストを取得したり
重複を許可しない制約を設けたい場合に使用します。
order byのようにデータの並べ替えや
重複を含む検索を実行したい場合に
使用します。
用途重複を許可しないデータを保存する
インデックスに向いています。
重複する可能性のあるデータを格納する
インデックスに向いています。

[サンプル]
copy
async function prepareCreateIndexTest(dbName, version, tableID)
{
	return new Promise((resolve, reject) => 
	{
		const request = indexedDB.open(dbName, version);
		let objectStore = null;
		request.onerror = function(event) 
		{
			console.error("it fail to open database:", event.target.error);
			reject(event.target.error);
		};
	
		request.onupgradeneeded = function(event) 
		{
			objectStore = request.transaction.objectStore(tableID);
			objectStore.createIndex("f2_index", "f2", { unique: false });
			objectStore.createIndex("f3_index", "f3", { unique: true });
			resolve(1);
		};
		request.onsuccess = function(event) 
		{
			const db = event.target.result;
			db.close();
			resolve(0);
		};
	});
 
}
prepareCreateIndexTest("sampleDB", 2, "t3")
.then((result) => 
{
	console.log("result:", result);
})
.catch((error) => 
{
	console.error("error:", error);
});

const request = indexedDB.open(dbName, version);
指定したデータベースをバージョンを指定してopenします。
インデックスを追加するため、既存のデータベースのバージョンを更新する必要があります。
request.onerror = function(event)
openエラーのイベントです。

request.onupgradeneeded = function(event)
この処理内容を更新する際のイベントです。
バージョンを上げたときなどに実行されます。

const db = event.target.result;
データベースオブジェクトを取得します。

objectStore = request.transaction.objectStore(tableID);
既存のオブジェクトスキーマ(テーブル)を取得します。

下記のように実行することで
作成したオブジェクトスキーマにインデックスの定義を追加します。
objectStore.createIndex("f2_index", "f2", { unique: false });
objectStore.createIndex("f3_index", "f3", { unique: true });
f2_index / f3_index作成するインデックスの名前です。
f2 / f3インデックスを作成するフィールド名です。
{ unique: true / false }このインデックスに重複した値を許可するかどうかを指定します。

resolve(1);
このonupgradeneededイベント処理が終わったのでresolveを実行します。

request.onsuccess = function(event)
openが成功したイベントです。

prepareCreateIndexTest("sampleDB", "t3")
インデックスを追加するテスト関数を実行しています。
第1引数はデータベースID
第2引数はテーブルID
です。

.then((result) =>
処理が成功したときに実行されます。
.catch((error) =>
処理が失敗したときに実行されます。



戻る


著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームペーよびアプリ利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。