Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表上的Android SQLite索引_Android_Sqlite - Fatal编程技术网

表上的Android SQLite索引

表上的Android SQLite索引,android,sqlite,Android,Sqlite,我在SIP应用程序中有一个表,用于存储您所有帐户的通话历史记录。我不是多列主键的朋友,所以我放了一个自动递增列作为我的主键 表的第一列是 CREATE TABLE IF NOT EXISTS CALLHISTORY ( CALLHISTORYID INTEGER PRIMARY KEY AUTOINCREMENT, ACCOUNTID INTEGER NOT NULL, CALLI

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

表的第一列是

    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类来处理组合键),我就无法做到这一点。