Index
@Target([]) class Index
androidx.room.Index |
Declares an index on an Entity. see: SQLite Index Documentation
Adding an index usually speeds up your SELECT queries but will slow down other queries like INSERT or UPDATE. You should be careful when adding indices to ensure that this additional cost is worth the gain.
There are 2 ways to define an index in an Entity
. You can either set ColumnInfo#index()
property to index individual fields or define composite indices via Entity#indices()
.
If an indexed field is embedded into another Entity via Embedded
, it is NOT added as an index to the containing Entity
. If you want to keep it indexed, you must re-declare it in the containing Entity
.
Similarly, if an Entity
extends another class, indices from the super classes are NOT inherited. You must re-declare them in the child Entity
or set Entity#inheritSuperIndices()
to true
.
Summary
Public constructors | |
---|---|
Declares an index on an Entity. |
Properties | |
---|---|
String |
Name of the index. |
Boolean |
If set to true, this will be a unique index and any duplicates will be rejected. |
Array<String> |
List of column names in the Index. |
Public constructors
<init>
Index(
vararg value: String,
name: String,
unique: Boolean)
Declares an index on an Entity. see: SQLite Index Documentation
Adding an index usually speeds up your SELECT queries but will slow down other queries like INSERT or UPDATE. You should be careful when adding indices to ensure that this additional cost is worth the gain.
There are 2 ways to define an index in an Entity
. You can either set ColumnInfo#index()
property to index individual fields or define composite indices via Entity#indices()
.
If an indexed field is embedded into another Entity via Embedded
, it is NOT added as an index to the containing Entity
. If you want to keep it indexed, you must re-declare it in the containing Entity
.
Similarly, if an Entity
extends another class, indices from the super classes are NOT inherited. You must re-declare them in the child Entity
or set Entity#inheritSuperIndices()
to true
.
Properties
name
val name: String
Name of the index. If not set, Room will set it to the list of columns joined by '_' and prefixed by "index_${tableName}". So if you have a table with name "Foo" and with an index of {"bar", "baz"}, generated index name will be "index_Foo_bar_baz". If you need to specify the index in a query, you should never rely on this name, instead, specify a name for your index.
Return | |
---|---|
String |
The name of the index. |
unique
val unique: Boolean
If set to true, this will be a unique index and any duplicates will be rejected.
Return | |
---|---|
Boolean |
True if index is unique. False by default. |
value
val value: Array<String>
List of column names in the Index.
The order of columns is important as it defines when SQLite can use a particular index. See SQLite documentation for details on index usage in the query optimizer.
Return | |
---|---|
Array<String> |
The list of column names in the Index. |