Sqlite удалить медленно в 4 ГБ - PullRequest
0 голосов
/ 05 июня 2018

Я использую файловую систему FAT32.У меня есть база данных, которая имеет размер 4 ГБ.База данных состоит из 1 родительской таблицы и 1 дочерней таблицы.Родительская таблица имеет 10 строк, а дочерняя таблица имеет 4000 строк.1 строка дочерней таблицы имеет размер 1 МБ.

Когда я удаляю строку в родительской таблице, удаление каскадируется дочерними записями размером 1 МБ.(прагма foreign_keys включена) Когда я пытаюсь удалить 100 МБ данных по каскаду (1 родительская запись - 100 дочерних записей), это занимает слишком много времени (почти 1-10 минут) для завершения, а продолжительность увеличивается / уменьшается на размер данных(100 МБ: 1-10 минут, 300 МБ: 3-30 минут и т. Д.).

Я попробовал некоторые прагматические команды (синхронные, temp_store, journal_mode), предложенные другими публикациями, и я также попытался добавить индекс навнешний ключ, но это не помогает решить мою проблему. (На самом деле, после добавления индекса по внешнему ключу удаление данных 1 МБ стало быстрее / st, но продолжительность удаления данных 100 МБ не изменилась) Можете ли вы дать мне какие-либо предложения по увеличениюпроизводительность удаления?

CREATE TABLE "ANHXT" (
  "id" integer primary key autoincrement,
  "ANH_AD" text,
  "ANH_DBGMHWID" text,
  "ANH_TYPE" integer,
  "ANH_INDEXNO" int64_t
)

CREATE TABLE "PRCXT" (
  "id" integer primary key autoincrement,
  "ANP_SEGMENTNO" integer not null,
  "ANP_VALUE" blob,
  "ANH_PRC_id" bigint,
  constraint "fk_ANHPRC_ANH_PRC" foreign key ("ANH_PRC_id") references  "ANHXT" ("id") on update cascade on delete cascade deferrable initially deferred
)

CREATE UNIQUE INDEX UQC_ANH_TYPE on ANHXT( ANH_TYPE)
CREATE UNIQUE INDEX UQC_ANP_SEGMENTNO_ANAHTARID on PRCXT( ANP_SEGMENTNO,ANH_PRC_id)
CREATE INDEX findex on PRCXT( ANH_PRC_id)
...