为什么从PostgreSQL中检索Elasticsearch中的数据要快得多?

时间:2014-10-31 17:35:33

标签: database performance postgresql elasticsearch offset

使用时间戳字段上的数据库索引执行以下简单数据库查找"已创建"比在Elasticsearch索引上执行相同的查找(持有相同的数据)要长10倍:

SELECT * FROM "my_table" ORDER BY "created" DESC LIMIT 1000 OFFSET 200000

此查询中没有过滤器,没有文本搜索 - 它是一个带高偏移的简单查找。使用较低的偏移量可以为PostgreSQL和Elasticsearch提供同样快速的结果。偏移越大,时差越大。即使没有对结果进行排序,使用较大的偏移也需要比ES更长的时间。

这是正常的还是PostgreSQL中有一个选项设置不正确?一般来说,数据库表现非常好,并且它在高流量网站上使用。

1 个答案:

答案 0 :(得分:2)

偏移量越大,服务器需要计算的行数就越多,因此使用的偏移越高,查询的效率就越低。

limit/offset的{​​{3}}警告:

  

OFFSET子句跳过的行仍然必须在里面计算   服务器;因此,大量的OFFSET可能效率低下。

小型OFFSET与大型SELECT的查询计划是什么样的?

根据具体用途 - 例如,您是否在服务器上进行后端工作 - 您可以使用光标而不是执行一系列{{1}虽然对于面向用户的事物和其他无状态连接方案 - 即分页 - 可能不是一种选择。

LIMITOFFSET