相关疑难解决方法(0)

PostgreSQL LIKE查询性能变化

关于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

103
推荐指数
3
解决办法
7万
查看次数

PostgreSQL:正则表达式转义函数

为了放弃阅读整个问题,我的基本问题是:
PostgreSQL中是否有一个函数来转义字符串中的正则表达式字符?

我已经探测过文档,但无法找到这样的功能.

这是完整的问题:

在PostgreSQL数据库中,我有一个包含唯一名称的列.我还有一个定期在此字段中插入名称的进程,并且为了防止重复,如果需要输入已存在的名称,它会在末尾附加一个空格和括号.

即姓名,姓名(1),姓名(2),姓名(3)等

就目前而言,我使用以下代码来查找要在系列中添加的下一个数字(用plpgsql编写):

var_name_id := 1;

SELECT CAST(substring(a.name from E'\\((\\d+)\\)$') AS int)
INTO var_last_name_id
FROM my_table.names a
WHERE a.name LIKE var_name || ' (%)'
ORDER BY CAST(substring(a.name from E'\\((\\d+)\\)$') AS int) DESC
LIMIT 1;

IF var_last_name_id IS NOT NULL THEN
    var_name_id = var_last_name_id + 1;
END IF;

var_new_name := var_name || ' (' || var_name_id || ')';
Run Code Online (Sandbox Code Playgroud)

(var_name包含我试图插入的名称.)

这暂时有效,但问题出在WHERE声明中:

WHERE a.name LIKE var_name || ' (%)'
Run Code Online (Sandbox Code Playgroud)

此检查不会验证有%问题的数字,并且它不会考虑多个括号,如"Name((1))",如果存在任何一种情况,则会抛出强制转换异常.

WHERE声明确实需要像更多的东西: …

regex postgresql escaping plpgsql pattern-matching

9
推荐指数
2
解决办法
4853
查看次数

SQL和模糊比较

我们假设我们有一个人员表(姓名,姓名,地址,SSN等).

我们想要找到与指定人A"非常相似"的所有行.我想实现某种模糊逻辑比较A和表People中的所有行.将有几个模糊推理规则分别在几个列上工作(例如3个名称的模糊规则,2个姓氏规则,5个地址规则)

问题是以下哪两种方法会更好,为什么?

  1. 将所有模糊规则实现为存储过程,并使用一个重的SELECT语句返回与A"非常相似"的所有行.此方法可能包括使用soundex,sim metric等.

  2. 实现一个或多个更简单的SELECT语句,返回不太准确的结果,"与A非常相似",然后将A与所有返回的行(数据库外部)进行模糊比较,以获得"非常相似"的行.因此,模糊的比较将在我最喜欢的编程语言中实现.

表人们应该有多达500k行,我想每天制作大约500-1000个这样的查询.我使用MySQL(但这还有待考虑).

mysql sql select fuzzy-logic fuzzy-comparison

8
推荐指数
1
解决办法
1498
查看次数

Redshift:有什么方法可以计算模糊字符串相似度/字符串编辑距离?

在 PSQL(我相信 Redshift 基于它)中,有像levenshtein/ levenshtein_less_equal[ http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html ]这样的字符串相似度函数。这些功能似乎没有进入 Redshift [ http://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html ]。我错了,还是有人提出了创造性的查询来解决此限制?

postgresql edit-distance amazon-redshift

5
推荐指数
1
解决办法
4508
查看次数

在tsvector中的每个元素上使用Levenshtein函数?

我正在尝试使用Postgres创建一个模糊搜索,并一直使用django-watson作为基础搜索引擎来解决问题.

我有一个名为search_tsv的字段,它是一个包含我要搜索的模型的所有字段值的tsvector.

我想要使​​用Levenshtein函数,它在文本字段中完全符合我的要求.但是,我真的不知道如何在tsvector的每个元素上运行它.

有没有办法做到这一点?

postgresql fuzzy-search tsvector levenshtein-distance

2
推荐指数
1
解决办法
3522
查看次数