我在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 上创建索引。