Это продолжение на основе этого вопроса об оптимизации запросов .
Чтобы сделать быстрый выбор, как было предложено, я попытался предварительно вычислить некоторые данные во время вставки, используя триггер.
По сути, я хочу сохранить количество вхождений значения данного столбца в данную таблицу.
Следующая схема используется для хранения вхождений для каждого из значений:
CREATE TABLE valuecount (value text, count int)
CREATE INDEX countidx ON t (count DESC)
CREATE UNIQUE INDEX valueidx ON valuecount (value);
А вот триггер, с которым я тестировал:
CREATE TRIGGER counttrigger INSERT ON collection
FOR EACH ROW
BEGIN
INSERT OR REPLACE INTO valuecount VALUES
(NEW.value, coalesce((SELECT count + 1 FROM count WHERE valuecount.query LIKE
NEW.value), 1));
END;
Типичная вставка в таблицу collection
содержит несколько сотен тысяч строк в одном операторе INSERT INTO ... SELECT ...
(я объединяю данные из БД в другую).
Проблема в том, что с этим триггером вставка 300К строк занимает 4 часа вместо 300 мс ...
Есть ли способ достичь этого без ущерба для производительности?
Заранее спасибо за помощь,