我想在Messages
和State
列的名为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;
....
}
谢谢。
答案 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