Я хочу сохранить таблицу ( 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 через весь таблица регистрации просто сделайте это при вставке или удалении (не так важно, что вряд ли произойдет много) из таблицы журналирования (которая со временем будет больше), какой частичный индекс я бы сделал.