如果可以缩小表中的位置,可以加快查询速度吗?

问题描述 投票:0回答:1

这是一个困扰我一段时间的概念性问题,但是我还没有找到一个好的解决方案(我不是数据库忍者):

我需要在表中找到特定行,该行在XML列中存储了标识符(以及其他内容)。这是由第三方组件完成的,我无法更改。该表很大,因此解析所有这些XML以查找标识符非常慢(我正在使用Postgres的内置XML解析器)。但是我知道我要搜索的行是插入的最后几行

之一。

有没有合理的方法来加快查询速度?

(我确实有一个时间戳列,但我怀疑对条目进行排序实际上会加快我的查询速度。)

编辑:

数据库表:

  • id(bigserial)
  • sentdate(bigint)
  • 节(文本)
  • 正文(文本)
  • 加上一些不相关的字符串列

XML示例(已缩短)

<message id="my_unique_identifier" to="user@chat_server" type="groupchat" from="chat_room@chat_server">
  <body>Hello World!</body>
</message>

到目前为止,我的基本查询(只执行xpath查找)

SELECT messages.* 
FROM messages 
WHERE ((xpath('/message/@id', stanza::XML))[1]::TEXT = 'my_unique_identifier') 
LIMIT 1
sql postgresql query-performance
1个回答
1
投票

如果您正在寻找一行并且在(timestamp)上有一个索引,那么以下内容可能会更快:

select t.*
from t
where . . . 
order by timestamp desc
limit 1;

由于order by,Postgres可能会选择按索引顺序扫描数据。但是,不能保证,Postgres仍然可以决定先进行所有解析,然后再进行所有排序。

可能找到对您正在做的事情有用的全文索引。

© www.soinside.com 2019 - 2024. All rights reserved.