Android SQLite Index on Table



我在SIP应用程序中有一个表,用于存储您所有帐户的通话记录。我不是多列主键的朋友,所以我放了一个自动增量列作为我的PK。

表的第一列是

    CREATE TABLE IF NOT EXISTS CALLHISTORY
    (
        CALLHISTORYID           INTEGER  PRIMARY KEY AUTOINCREMENT,
        ACCOUNTID               INTEGER  NOT NULL,
        CALLID                  TEXT     NOT NULL,
        ... + many more columns

我从 CallManager(SIP 服务器)获得一个 callId,这对于一个帐户是唯一的(因此 accountId + callId 一起构建一个唯一的对)。

我设置了这样的索引:

CREATE INDEX IF NOT EXISTS IX_CALLHISTORY_ACCOUNTID ON CALLHISTORY (ACCOUNTID);
CREATE UNIQUE INDEX UIX_CALLHISTORY_ACCOUNTID_CALLID ON CALLHISTORY (ACCOUNTID,CALLID);

我在应用程序中对这个表有几个查询,一些只查询 accountId,一些查询对(取决于活动)。我真的需要两个索引,还是只有where子句中accountId的查询也会使用唯一索引?

感谢您的帮助!

来自文档(1.6 个多列索引):

多列索引遵循与单列相同的模式 指数;索引列将添加到 rowid 的前面。唯一的 不同之处在于现在添加了多个列。最左边的 列是用于对索引中的行进行排序的主键。这 第二列用于断开最左侧列中的连接。如果有 如果是第三列,它将用于打破前两列的联系 列。索引中的所有列依此类推。因为罗维德是 保证是唯一的,索引的每一行都是唯一的,即使 两行的所有内容列都相同。

因此,ACCOUNTID 和 CALLID 字段的索引已经处理了 ACCOUNTID 的排序,因此在这种情况下不需要在 ACCOUNTID 上创建索引。

最新更新