相关疑难解决方法(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是否支持"不区分重音"排序规则?

在Microsoft SQL Server中,可以指定"重音不敏感"排序规则(对于数据库,表或列),这意味着可以进行类似的查询

SELECT * FROM users WHERE name LIKE 'João'
Run Code Online (Sandbox Code Playgroud)

找到一个带有Joao名字的行.

我知道可以使用unaccent_string contrib函数从PostgreSQL中删除字符串中的重音符号,但我想知道PostgreSQL是否支持这些"重音不敏感"排序规则,以便SELECT上述方法可行.

sql postgresql indexing localization pattern-matching

88
推荐指数
2
解决办法
3万
查看次数

postgres功能:IMMUTABLE什么时候会伤害性能?

在Postgres的文档说

为了获得最佳的优化结果,您应该使用对其有效的最严格的波动率类别标记您的函数.

但是,我似乎有一个例子,并非如此,我想了解发生了什么.(背景:我正在运行postgres 9.2)

我经常需要将表示为整数秒的时间转换为日期.我写了一个函数来做到这一点:

CREATE OR REPLACE FUNCTION 
  to_datestamp(time_int double precision) RETURNS date AS $$
  SELECT date_trunc('day', to_timestamp($1))::date;
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

让我们将性能与其他相同的函数进行比较,将波动率设置为IMMUTABLE和STABLE:

CREATE OR REPLACE FUNCTION 
  to_datestamp_immutable(time_int double precision) RETURNS date AS $$
  SELECT date_trunc('day', to_timestamp($1))::date;
$$ LANGUAGE SQL IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
CREATE OR REPLACE FUNCTION 
  to_datestamp_stable(time_int double precision) RETURNS date AS $$
  SELECT date_trunc('day', to_timestamp($1))::date;
$$ LANGUAGE SQL STABLE;
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我将创建一个10 ^ 6个随机整数的表,对应于2010-01-01和2015-01-01之间的时间

CREATE TEMPORARY TABLE random_times AS
  SELECT 1262304000 + round(random() * 157766400) AS time_int 
  FROM generate_series(1, 1000000) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance user-defined-functions

7
推荐指数
1
解决办法
3340
查看次数

创建 concat_ws 的不可变克隆

这篇博文展示了如何immutable_concat在 Pg 中创建函数的示例:

CREATE OR REPLACE FUNCTION immutable_concat(VARIADIC "any")
  RETURNS text AS 'text_concat'
  LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情concat_ws并且相应的text_concat_ws确实存在,但是,以下只会使过程崩溃:

CREATE OR REPLACE FUNCTION immutable_concat_ws(VARIADIC "any")
  RETURNS text AS 'text_concat_ws'
  LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

更新: 的 siguatureimmutable_concat_ws应该是(glue, *parts),一个胶水(text 或 varchar)和一个或多个部分(text、varchar 或 null)。

我在这里缺少什么?

postgresql concat function concat-ws

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

如何使用 LIKE 运算符在数组中搜索

编号 | 名称 | IP地址           
---+----------+-------------------------
  1 | 测试名称 | {192.168.1.60,192.168.1.65}

我想ipAddress用 进行搜索LIKE。我试过:

{'$mac_ip_addresses.ip_address$': { [OP.contains]: [searchItem]}},
Run Code Online (Sandbox Code Playgroud)

这也:

{'$mac_ip_addresses.ip_address$': { [OP.Like] : { [OP.any]: [searchItem]}}},
Run Code Online (Sandbox Code Playgroud)

的数据类型ipAddress是text[]. 我想用 进行ipAddress搜索LIKE。 searchItem包含需要在ipAddress字段中搜索的 IP,因此我想在数组中搜索LIKE.

arrays postgresql database-design string-matching sequelize.js

4
推荐指数
1
解决办法
3485
查看次数