我在 PostgreSQL 9.0.8 中有一个很大的对象表(15M+ 行),我想查询过时的字段。
出于可扩展性和并发性的目的,我想将查询除以数百万,并且我想获取具有几天前日期的 updated_at 字段的所有数据。
我已经在 100 万个 ID 上尝试了许多索引和查询,但使用 Heroku 的 Ronin 硬件似乎无法在 100 秒内获得性能。
我正在寻找我尚未尝试使其尽可能高效的建议。
尝试 #1
EXPLAIN ANALYZE SELECT count(*) FROM objects
WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id < 6000001;
INDEX USED: (date(updated_at),id)
268578.934 ms
Run Code Online (Sandbox Code Playgroud)
尝试 #2
EXPLAIN ANALYZE SELECT count(*) FROM objects
WHERE ((date(now()) - (date(updated_at)) > 7)) AND id >= 5000001 AND id < 6000001;
INDEX USED: primary key
335555.144 ms
Run Code Online (Sandbox Code Playgroud)
尝试 #3
EXPLAIN ANALYZE SELECT count(*) FROM …
Run Code Online (Sandbox Code Playgroud) postgresql performance index partitioning postgresql-performance
我想知道 postgresql 中表的最后修改日期。在 SQL Server 中可以得到使用
SELECT modify_date FROM sys.objects
Run Code Online (Sandbox Code Playgroud)
如何在 Postgres 中得到同样的东西?我正在使用 Postgres 9.4
我需要知道是否有任何方法可以故意破坏 PostgreSQL 中的索引。
我找了很久,但从未见过有人提到过这样的行为。