关于LIKE查询数据库中特定表的响应时间,我看到了相当大的变化.有时我会在200-400毫秒内得到结果(非常可接受),但有时候返回结果可能需要30秒.
我知道LIKE查询是非常耗费资源的,但我只是不明白为什么响应时间会有这么大的差异.我已经在该owner1字段上构建了一个btree索引,但我认为这对LIKE查询没有帮助.有人有主意吗?
示例SQL:
SELECT gid, owner1 FORM parcels
WHERE owner1 ILIKE '%someones name%' LIMIT 10
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('%someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)
和:
SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)
有类似的结果.
表行数:约95,000.
postgresql indexing query-optimization pattern-matching sql-like
我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated.
但是,该字段允许为空或空,我想与空记录last_updated来之前,非空last_updated.
这可能吗?
order by last_updated asc /* and null last_updated records first ?? */
Run Code Online (Sandbox Code Playgroud) 如果我想以递减精度搜索表中的单行,例如:
SELECT * FROM image WHERE name LIKE 'text' AND group_id = 10 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
如果这没有给我结果,请尝试这个:
SELECT * FROM image WHERE name LIKE 'text' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
当这没有给我结果时,尝试这个:
SELECT * FROM image WHERE group_id = 10 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
是否可以只用一种表达方式来做到这一点?
当我没有两个而是例如三个或更多搜索参数时,也会出现问题。有通用的解决方案吗?当然,当搜索结果按相关性排序时,它会派上用场。
从表中删除,然后插入到同一个表并返回插入值的 CTE 语法是什么?
运行 2 小时的睡眠,有些事情看起来不对劲(除了这不会执行的事实):
WITH delete_rows AS (
DELETE FROM <some_table> WHERE id = <id_value>
RETURNING *
)
SELECT * FROM delete_rows
UNION
(
INSERT INTO <some_table> ( id, text_field )
VALUES ( <id_value>, '<text_field_value>' )
RETURNING *
)
Run Code Online (Sandbox Code Playgroud)
预期的行为是首先清除一个 ID 的所有记录,然后插入相同 ID 的记录(故意不是 upsert)并返回那些插入的记录(不是删除)。
我基本上有 2 个查询来返回数据,第一个查询速度很快,但在 5% 的情况下不起作用,第二个查询适用于所有情况,但速度慢很多
如何以始终返回结果但在第一个查询产生结果时避免运行第二个查询的方式对其进行编码?我所说的结果是指 1 行到 1000 行之间的任何内容
我当前的查询仅运行第一个查询并返回空结果集,如下所示:
SELECT CASE WHEN x.column1 IS NOT NULL THEN x.column1 ELSE y.column1 END column1,
CASE WHEN x.column1 IS NOT NULL THEN x.column2 ELSE y.column2 END column2
FROM (SELECT column1, column2 FROM mytable WHERE < 1st SET OF complex conditions >) x
, (SELECT column1, column2 FROM mytable WHERE < 2nd SET OF complex conditions >) y
Run Code Online (Sandbox Code Playgroud)
我所说的复杂条件是指一系列 GIS 函数,例如 st_intersects 和 st_dwithin ,它们会使这个问题变得更加复杂。当第一个查询返回某些内容时,两个查询的输出是相同的。我不能同时运行两者,否则它运行时间太长并且用户超时。
我当前的查询没有注册 x.column1 没有返回任何内容,并且由于 y 查询返回的条件集从未被考虑在内,如何解决这个问题?
编辑:同样,预期结果是当 query1 …