У меня есть процесс, когда в какой-то момент я должен добавить новый столбец в таблицу типа INTEGER, тогда мне нужно заполнить этот новый столбец UPDATE. Я делаю это в C.sqlite оптимальное обновление после таблицы alter add
я могу наклониться мой код
CREATE table t (a integer, b integer)
populate t
CREATE INDEX t_ndx on t (a)
ALTER TABLE t add c integer
: C псевдо-код для обновления столбца «с» выглядеть следующим образом
sqlite3_stmt u;
sqlite3_prepare_v2(db, "update t set c=? where a=?, -1, &u, 0);
for(i=0;i<n;i++)
{ c=c_a[i];
a=a_a[i];
sqlite3_bind_int64(u, 1, c);
sqlite3_bind_int64(u, 1, a);
sqlite3_step(u);
}
порядка а являются то же самое для этого UPDATE, как указано при создании t.
Хотелось бы узнать, обнаружил ли механизм sqlite3 «последовательный» доступ и ускорил «где a =?» (т. е. сохранить своего рода кеширование предыдущего курсора?
Я также хотел бы знать, есть ли скрытая функция, такая как массив привязки (по крайней мере, при работе с INTEGER), чтобы избежать создания такого цикла и избегать всех эти переплеты и избежать байткод для выполнения всех тех, кто вставить что-то вдоль линии
sqlite3_stmt u;
sqlite3_prepare_v2(db, "update t set c=? where a=?, -1, &u, 0);
sqlite3_bind_int64_array(u, 1, c_a, n);
sqlite3_bind_int64_array(u, 1, a_a, n);
sqlite3_step_array(u,n);
Thanx заранее Приветствия Phi
Thanx CL для вашего ответа, я сохраню пример CASE для другой ситуации, которую я получил. Я создал индекс «a» в надежде, что он ускорит WHERE a =?, Я думал, что это облегчит сканирование, но =? порядок, который я предоставил, точно соответствует порядку строк в 't', может быть, тогда я могу принудительно выполнить сканирование с помощью rowid, если сканирование с помощью rowid выполняется быстрее, чем сканирование индексом на col 'a'. Я не знаю внутренних компонентов sqlite3. Опять thanx. фита – Phi