我想通过查询得到结果:
SELECT * FROM (
SELECT id, subject
FROM mailboxes
WHERE tsv @@ plainto_tsquery('avail')
) AS t1 ORDER by id DESC;
Run Code Online (Sandbox Code Playgroud)
这有效并返回tsv
包含包含的行Available
。但是如果我使用avai
(dropped lable
) 它找不到任何东西。
所有查询都必须在字典中吗?我们不能只查询这样的字母吗?我有一个包含电子邮件正文(内容)的数据库,我希望随着它每秒增长而使其快速增长。目前我正在使用
... WHERE content ~* 'letters`
Run Code Online (Sandbox Code Playgroud) 我有一个包含 10,301,390 个 GPS 记录、城市、国家和 IP 地址块的表。我有用户当前的经纬度位置。我创建了这个查询:
SELECT
*, point(45.1013021, 46.3021011) <@> point(latitude, longitude) :: point AS distance
FROM
locs
WHERE
(
point(45.1013021, 46.3021011) <@> point(latitude, longitude)
) < 10 -- radius
ORDER BY
distance LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
这个查询成功地给了我我想要的东西,但它很慢。根据给定的纬度和经度,获得一条记录需要 2 到 3 秒。
我在latitude
和longitude
列上尝试了 B 树索引,也尝试过,GIST( point(latitude, longitude));
但查询仍然很慢。
我怎样才能加快这个查询?
似乎缓慢是由 引起的,ORDER BY
但我想获得最短距离,所以问题仍然存在。
今天我在PostgreSQL 9.5上发现了一些奇怪的东西。(我不知道这是否是因为测试版。)当我想获取数据时,我会从查询中获取旧的和已删除的数据。VACUUM FULL
然后我做,然后我得到正确的数据(这是空的)。
我在这里错过了什么吗?PostgreSQL 返回旧数据的原因可能是什么?
注意:自动真空是ON
.
postgresql concurrency transaction isolation-level postgresql-9.5