すべてのアカウントの通話履歴を保存するテーブルがSIPアプリケーションにあります。私は複数列の主キーの友人ではないので、私は自分のPKとして自動インクリメント列を配置します。テーブル上のAndroid SQLiteインデックス
表の最初の列は、私はアカウントに固有のCallManagerの(SIPサーバ)、(そうたaccountId + callIdが一緒にユニークなペアを構築)からcallIdを取得
CREATE TABLE IF NOT EXISTS CALLHISTORY
(
CALLHISTORYID INTEGER PRIMARY KEY AUTOINCREMENT,
ACCOUNTID INTEGER NOT NULL,
CALLID TEXT NOT NULL,
... + many more columns
です。
私はこのようなインデックスを設定:
CREATE INDEX IF NOT EXISTS IX_CALLHISTORY_ACCOUNTID ON CALLHISTORY (ACCOUNTID);
CREATE UNIQUE INDEX UIX_CALLHISTORY_ACCOUNTID_CALLID ON CALLHISTORY (ACCOUNTID,CALLID);
Iは、いくつかのアプリケーションでは、このテーブルにクエリ、いくつかのクエリのみaccountIdを、いくつかのペアを照会する(活性に依存する)を有します。 私は本当に両方のインデックスが必要ですか、またはwhere
句にaccountId
だけしか含まれていないクエリもユニークインデックスを使用しますか?
ありがとうございました! doc(1.6マルチ列インデックス)から
マルチカラムPKを使用しない*技術的な理由はありますか? –
callHistoryIdをいくつかのメソッドで渡しています。 1つの整数値だけを渡す方が簡単で、メソッドの戻り値としても機能します。常に2つのフィールドが含まれていた場合(または、結合されたキーの新しいデータ保持者クラスが必要です)、私はできません。 – Grisgram