如何在Android Room中创建部分索引

时间:2019-03-31 06:30:44

标签: android sqlite indexing android-room

我想在MessagesState列的名为Id的表上创建部分索引。通常,可以通过添加WHERE子句来创建索引语句来完成此操作,如official docs中所述。正确的SQLite语句应为:

CREATE  INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2

由于我当前使用Room作为我的ORM,所以我不知道如何使用Room语法声明部分索引。

这是我的Messages表的摘要:

@Entity(tableName = "Messages")
public class Message implements Parcelable {
    @PrimaryKey
    @SerializedName("i")
    @ColumnInfo(name = "Id")
    private long mId;

    @SerializedName("t")
    @ColumnInfo(name = "Type")
    private byte mType;

    @SerializedName("s")
    @ColumnInfo(name = "State")
    private byte mState;

    ....
}

谢谢。

1 个答案:

答案 0 :(得分:3)

我认为(在2019年7月22日起)在会议室中没有确定的方法来完成此操作。

在我们的团队中,我们通过在迁移中定义部分索引来解决此阻塞问题。

database.execSQL("CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2")

注意:如果您的Android版本小于21,则Partial index only work on SQLite 3.8.0或更高,即supported in API >= 21