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

标签 android sqlite indexing android-room

我想在名为 Messages 的表的 StateId 列上创建部分索引。通常这可以通过添加 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/

相关文章:

java - Android 抛出 DeadObjectException : Transaction failed on small parcel; remote process probably died just in HUAWEI Android 8. 0.0

java - 如何在 ElasticSearch 中添加分析器设置?

java - 对齐 2 个文本,1 个正常,1 个相反

Android 应用程序数据存储不断增加

javascript - UTF-8 字符串比较在 javascript 中返回 false

solr - Cassandra 和SOLR?什么为前端读取查询提供了更好的性能?

c# - WPF 绑定(bind)如何区分索引器属性和列表元素?

python - sqlite数据库未连接

node.js - 离线优先数据库而不是 sqlite

ios - 在两台 iPhone 之间同步 SQLite 数据库