Как управлять таблицей, которая является подмножеством основной таблицы (невозможно использовать частичный индекс)? - PullRequest
1 голос
/ 12 января 2020

Я хочу сохранить таблицу ( first_and_last ), которая содержит ссылку на первую x и последнюю y строки, соответственно к отметке времени (которая не может быть вставлена ​​в соответствии с отметкой времени) основной таблицы logging . Где x и y - это значения, хранящиеся в другой таблице с одной строкой для хранения этих значений.

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

Для тестирования / разработки этого основная таблица создается с помощью: -

CREATE TABLE IF NOT EXISTS logging(id INTEGER PRIMARY KEY,timestamp INTEGER UNIQUE,otherdata TEXT DEFAULT 'xxx');

Таблица, содержащая значения (которые могут измениться) x и y (столбцы first_limit и last_limit), создается и заполняется с использованием: -

CREATE TABLE IF NOT EXISTS first_and_last_value(first_limit INTEGER,last_limit INTEGER);
INSERT OR REPLACE INTO first_and_last_value(rowid,first_limit,last_limit) VALUES (1,5,7);

Таблица для хранения подмножеств первой и последней строк в соответствии с меткой времени создается с помощью: -

CREATE TABLE IF NOT EXISTS first_and_last(id INTEGER PRIMARY KEY REFERENCES logging(id) ON UPDATE CASCADE ON DELETE CASCADE,timestamp INTEGER);

Я добавляю строки тестирования с использованием (поэтому некоторые метки времени не вставляются по порядку): -

WITH timestamps(timestamp) AS
    ( 
        SELECT strftime('%s','now')
        UNION ALL SELECT strftime('%s',timestamp,'unixepoch','+1 minute') FROM timestamps LIMIT 20
    )
INSERT INTO logging (timestamp) SELECT * FROM timestamps;
INSERT INTO logging (timestamp,otherdata) SELECT strftime('%s','now','-10 minute'),'AAA NEW LOWEST (FIRST)';
INSERT INTO logging (timestamp,otherdata) SELECT strftime('%s','now','+1 day'),'ZZZ NEW HIGHEST (LAST)';

Это дает мне данные в таблице журналирования, такие как (порядок по метке времени)

id  timestamp   otherdata
21  1578775137  AAA NEW LOWEST (FIRST)
1   1578775737  xxx
2   1578775797  xxx
3   1578775857  xxx
4   1578775917  xxx
5   1578775977  xxx
6   1578776037  xxx
7   1578776097  xxx
8   1578776157  xxx
9   1578776217  xxx
10  1578776277  xxx
11  1578776337  xxx
12  1578776397  xxx
13  1578776457  xxx
14  1578776517  xxx
15  1578776577  xxx
16  1578776637  xxx
17  1578776697  xxx
18  1578776757  xxx
19  1578776817  xxx
20  1578776877  xxx
22  1578862138  ZZZ NEW HIGHEST (LAST)

В таблице first_and_last будут строки для идентификаторов 21 (новые добавлены первыми), 1, 2, 3 и 4 ( первые 5) и 15,16,17,18,19,20 & 22 * ​​1036 *

id  timestamp   otherdata
21  1578775137  AAA NEW LOWEST (FIRST)
1   1578775737  xxx
2   1578775797  xxx
3   1578775857  xxx
4   1578775917  xxx
15  1578776577  xxx
16  1578776637  xxx
17  1578776697  xxx
18  1578776757  xxx
19  1578776817  xxx
20  1578776877  xxx
22  1578862138  ZZZ NEW HIGHEST (LAST)

Как я могу, если могу, добавлять / удалять строки в таблице first_and_last Надеюсь, без необходимости go через весь таблица регистрации просто сделайте это при вставке или удалении (не так важно, что вряд ли произойдет много) из таблицы журналирования (которая со временем будет больше), какой частичный индекс я бы сделал.

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