INSERT после добавления нового идентификатора в базовую таблицу - PullRequest
0 голосов
/ 31 мая 2018

У меня есть две части к этому вопросу, одна будет бонусом для меня, если вы сможете ответить.

Вопрос № 1 У меня есть две таблицы SQLITE с именами tbl и tbl_search, где tbl являетсяобычная таблица и tbl_search - это таблица FTS4

Допустим, мы находимся при запуске # 0 моего приложения, приложение запускается и начинает заполнять таблицу tbl данными, а затем в конце копирует все из таблицы tbl в таблицу tbl_searchи работа сделана, но это связано с затратами на производительность для дополнительных прогонов.Для инкрементных прогонов (прогон № 1) до сих пор я удалял и заново создавал таблицу fts, потому что во время обычного копирования она также использовала для выгрузки элементов прогона № 0, создавая дубликаты данных, плюс это стоиломного на части производительности.

После размышления я нашел 4 метода для решения этой ситуации:

1) Создание триггера SQL для копирования tbl в tbl_search.

2) Создайте временную таблицу при каждом запуске и скопируйте ее данные в tbl_search, чтобы избежать дублирования, а затем удалите ее

3) Используйте уникальные идентификаторы в столбце идентификатора tbl, найдите недостающие и скопируйте только те в tbl_search

4) создайте еще одну таблицу, в которой будут указаны данные о последнем запуске, и используйте их, чтобы поместить все после столбца --AFTER Date.Предположим, что последний запуск завершился 04-05-2018 21:40, а затем повторить все после этого времени от tbl до tbl_search.

Я нашел вариант № 3 наиболее плодотворным с точки зрения производительности и хотел быпойти на это, так как я могу это сделать?Ниже приведен пример таблицы для справки.

RUN # 0

ID                    FILENAME                              LABEL_NUMBER
----------------------------------------------------------------------
1              C:/Test_Software/6.avi                          11
2              C:/Test_Software/6.avi                          10
3              C:/Test_Software/6.avi                          8
4              C:/Test_Software/6.avi                          6
5              C:/26.avi                                       10
6              C:/26.avi                                       8

RUN # 1 (в инкрементах)

    ID                    FILENAME                              LABEL_NUMBER
    ----------------------------------------------------------------------
    7              C:/Test_Software/36.avi                          51
    8              C:/Test_Software/556.avi                         30

Я хотел бы выполнить запрос, подобный следующему:

Select ID from tbl, If (ID not present in tbl_search) INSERT into tbl_search

Бонусный вопрос: Из всех методов, которыми я поделился, какой самый быстрый и лучший метод, который я должен выбрать?Пожалуйста, поделитесь ПОЧЕМУ и How-To, я буду благодарен.

1 Ответ

0 голосов
/ 31 мая 2018

Я собираюсь ответить на этот вопрос самостоятельно, так как сейчас достаточно тестировал:

Метод № 1: триггеры SQL

Отличный метод, если вы нене нужно заботиться о циклах (вложенные циклы) Болезненный метод, если у вас триллионы циклов, выполняемых до того, как что-то может быть выполнено в таблицах, следовательно, дисквалифицировано для меня

Метод № 2: Создатьвременная таблица

Хотя это хороший метод, он не даст вам никакого увеличения производительности, скорее будет эффект дублирования.Таким образом, не рекомендуется.

Метод № 3: Используйте ID

Лучший метод, потому что идентификаторы создаются как уникальный ключ в таблице, поэтому вы можете простозапросите последний идентификатор, сохраните идентификатор где-нибудь, а затем сравните другую таблицу, начиная с идентификатора last_known.Получил здесь наибольшую выгоду от производительности.

Метод № 4: Создайте еще одну таблицу - Aux Table

Нах, пустая трата усилий и ресурсов.не рекомендуется снова.

Надеюсь, что это помогает товарищам ТАК люди.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...