我使用的是postgresql 11版。它包含数以百万计的数据。包括insert和update在内的所有操作都正常工作,但是当我运行带有一些过滤器的select查询时,它会卡住,即使在10分钟后也不会响应。
我正在使用这个简单的查询进行测试,但它仍然被卡住了。
select tweet_id, user_id
from "TweetsData"
where lid_id=1 and tweet_time<='2020-06-09 09:00:00'
order by tweet_time desc limit 10
甚至我也没有得到这个查询的explain-analyze输出。
下面是explain的输出
Limit (cost=2053991.46..2053992.62 rows=10 width=43)
-> Gather Merge (cost=2053991.46..3462030.09 rows=12068060 width=43)
Workers Planned: 2
-> Sort (cost=2052991.43..2068076.51 rows=6034030 width=43)
Sort Key: tweet_time DESC
-> Parallel Seq Scan on "TweetsData" (cost=0.00..1922598.21 rows=6034030 width=43)
Filter: ((tweet_time <= '2020-06-09 09:00:00'::timestamp without time zone) AND (lid_id = 1))
请帮助我如何解决这个问题?这是非常关键的。提前谢谢。
1条答案
按热度按时间cidc1ykv1#
如果没有可用的索引,计划员只能选择一个计划:扫描所有行,对它们排序,过滤它们,然后选择前10行。这意味着:从磁盘中获取12m条记录,只需获得10个结果元组。索引访问只需要从磁盘获取x*10页(x在0.1到几十之间)
这里只使用一个索引(在时间戳上)(列名称略有不同):
输出:
raspberrypi b上的输出(大约慢10倍):