我在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,有些查询对(取决于Activity)。
我是否真的需要两个索引,或者accountId
子句中只有where
的查询是否也使用唯一索引?
感谢您的帮助!
答案 0 :(得分:3)
来自doc(1.6多列指数):
多列索引遵循与单列相同的模式 指数;索引列添加在rowid前面。唯一的 区别在于现在添加了多个列。最左边的 column是用于对索引中的行进行排序的主键。该 第二列用于打破最左列中的关系。如果有 是第三列,它将用于打破前两个的关系 列。等等索引中的所有列。因为rowid是 保证是唯一的,即使索引的每一行都是唯一的 两行的所有内容列都是相同的。
因此,ACCOUNTID和CALLID字段的索引已经处理了ACCOUNTID的排序,因此在这种情况下不需要在ACCOUNTID上创建索引。