Sdg*_*emi 3 sqlite indexing android android-room
我想在名为MessagesonState和Idcolumns 的表上创建部分索引。WHERE通常,这可以通过添加一个子句来创建索引语句来完成,如官方文档中所述。正确的 SQLite 语句是:
CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2
Run Code Online (Sandbox Code Playgroud)
由于我目前使用 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;
....
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我认为 Room 中没有明确的方法来执行此操作(截至 2019 年 7 月 22 日)。
在我的团队中,我们通过在迁移中定义部分索引来绕过这个障碍。
database.execSQL("CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2")
Run Code Online (Sandbox Code Playgroud)
注意:如果您的 Android 版本低于 21,这可能不起作用。部分索引仅适用于 SQLite 3.8.0及更高版本,API >= 21 支持部分索引
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |