@Entity(tableName = "items")
class Item {
@PrimaryKey
var id=0
@ColumnInfo(name = "name")
var name=""
@ColumnInfo(name = "thumbnail")
var thumbnail=""
}
@RawQuery(observedEntities = [Item::class])
fun select(query:SupportSQLiteQuery):Flowable<List<Item>>
@RawQuery(observedEntities = [Item::class])
fun selectCount(query: SupportSQLiteQuery):Int
//query example
//select id,name,thumbnail from items
//where (name like '%ruby%' and name like '%diamond%') and
//(thumbnail like '%lion%' and thumbnail like '%tiger%')
DB.getInstance().Dao().select(query)
.concatMapIterable { it }
.concatMap {
//blabla...
}
У selectCount очень короткое время оборота, но при выборе select он генерирует почти один элемент в секунду. (Где условия обеих функций одинаковы)
Даже когда я обращаюсь к одному и тому же запросу напрямую с помощью SQLiteOpenHelper, он измеряется в 10 раз быстрее, чем с помощью Room.
Есть ли что-то, что я упустил в улучшении скорости? Когда я создаю экземпляр базы данных, я использую следующие функции.
fun getInstance(): DB {
if (INSTANCE == null) {
synchronized(DB::class) {
INSTANCE = Room.databaseBuilder(
getContext(),
DB::class.java,
"test.db")
.build()
}
}
return INSTANCE!!
}