表上的Android SQLite索引
我在SIP应用程序中有一个表,用于存储您所有帐户的通话历史记录。我不是多列主键的朋友,所以我放了一个自动递增列作为我的主键 表的第一列是表上的Android SQLite索引,android,sqlite,Android,Sqlite,我在SIP应用程序中有一个表,用于存储您所有帐户的通话历史记录。我不是多列主键的朋友,所以我放了一个自动递增列作为我的主键 表的第一列是 CREATE TABLE IF NOT EXISTS CALLHISTORY ( CALLHISTORYID INTEGER PRIMARY KEY AUTOINCREMENT, ACCOUNTID INTEGER NOT NULL, CALLI
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上创建索引。不使用多列PK有技术原因吗?我们通过多种方法传递callHistoryId。只传递一个整数值更简单,甚至可以用作方法的返回值。如果总是涉及两个字段(或者我需要一个新的dataholder类来处理组合键),我就无法做到这一点。