Оптимизация вставок SQLite

У меня есть эта функция ниже, которая работает нормально:

Я использую его, потому что в процессе синхронизации мне приходится вставлять много строк (иногда более 30 000 в одной и той же синхронизации) в разные таблицы, а для некоторых из них значение, полученное из моего Json объект не настоящий. Поэтому, прежде чем вставить строку, я должен заменить значение другим. Вот почему я использую эту функцию:

public void myFunction( String tableName, String attrName, ContentValues currentVal ) { 

    SQLiteDatabase database = this.getReadableDatabase();
    long realValue = -1;

    Cursor c = database.rawQuery("SELECT value FROM "+tableName+" WHERE "+tableName+".other_value = " + currentVal.getAsString(attrName), null);

    if( c.moveToFirst() ) { 
        realValue = c.getLong(0);
    }
    if( c != null ) c.close();

    currentVal.put( attrName, realValue );  

}

Моя проблема заключается в Cursor... c.moveToFirst() Функция влияет на скорость процесса.

Я проводил исследования и нашел так много объяснений, как:

/questions/36667087/pervyij-raz-kursor-rabotaet-tak-medlenno-kogda-zaprashivaet-obemnyie-dannyie-kak-reshit/36667090#36667090

Я указываю, что использую индексы и уже пробую транзакции.

Итак, что я хотел сделать сейчас (или узнать): Есть ли способ выполнить что-то вроде:

currentVal.put( attrName, SELECT value FROM "+tableName+" WHERE "+tableName+".other_value = " + currentVal.getAsString(attrName) );

Потому что с этим трюком мне не придется повторяться в моем Cursor (что на самом деле моя проблема) и когда я буду вставлять содержимое ContentValues он автоматически обработает подзапрос, чтобы получить реальное значение для вставки.

Я также думал о создании временной таблицы. Я вставляю ценности, основанные на моем Json объект, не меняя их, и когда я вставил все значения для текущей таблицы, я скопировал их в реальную таблицу, в то же время выполнив подзапрос для повторного размещения неправильных значений на правильные.

Любые идеи, предложения, фрагменты,... будут оценены

0 ответов

Другие вопросы по тегам