我有一个包含数百万行的表,该表不断变化(插入、更新和删除一些新行)。我想每分钟查询 100 个新行(我以前没有查询过),但这些行不能是我以前查询过的行。该表有大约 2 打列和一个主键。
很乐意回答任何问题或提供说明。
最佳答案
一个简单的解决方案是有一个单独的表,其中只有一行来存储您获取的最后一个 ID。
假设这是您的“数百万行的表格”:
-- That's your table with million of rows
CREATE TABLE test_table (
id serial unique,
col1 text,
col2 timestamp
);
-- Data sample
INSERT INTO test_table (col1, col2)
SELECT 'test', generate_series
FROM generate_series(now() - interval '1 year', now(), '1 day');
您可以创建下表来存储 ID:
-- Table to keep last id
CREATE TABLE last_query (
last_quey_id int references test_table (id)
);
-- Initial row
INSERT INTO last_query (last_quey_id) VALUES (1);
然后使用以下查询,您将始终从原始表中获取从未获取的 100 行,并在 last_query
中维护一个指针:
WITH last_id as (
SELECT last_quey_id FROM last_query
), new_rows as (
SELECT *
FROM test_table
WHERE id > (SELECT last_quey_id FROM last_id)
ORDER BY id
LIMIT 100
), update_last_id as (
UPDATE last_query SET last_quey_id = (SELECT MAX(id) FROM new_rows)
)
SELECT * FROM new_rows;
行将按照新 ID 的顺序获取(最早的行在前)。
关于sql - 如何从不检索更改表中的不同行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42796723/