我想在名为 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;
....
}
提前致谢。
最佳答案
我认为 Room 中没有明确的方法来执行此操作(截至 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
关于android - 如何在 Android Room 中创建部分索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55438435/