我正在试验postgres的jsonb种专栏类型,到目前为止还不错.

select count(*) from jsonbtest WHERE attributes @> '{"City":"Mesa"}';

我该如何扭转这种局面?是否有不同的运算符,或者只是用作

select count(*) from jsonbtest WHERE NOT attributes @> '{"City":"Mesa"}';

推荐答案

两种方式,您可以测试任何json(b)值

  • ->>运算符将值提取为文本.但是,如果只使用值测试,则此操作会变慢
  • @>运算符测试任何json(b)是否包含任何json(b).这是一个快速但未经测试的选项.

简单快捷的方法:

NOT (attribute @> '{"City":"Mesa"}'::jsonb)

我将attribute->>'City' <> 'Mesa'改为NOT (attribute @> '{"City":"Mesa"}'::jsonb),我的~2.000.000行查询结果时间从45秒改为25秒.

Postgresql相关问答推荐

优化PostgreSQL查询以将用户插入数据库

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

使用函数返回值作为另一个函数的参数

为什么 Postgres 中的 now() 和 now()::timestamp 对于 CET 和 CEST 时区如此错误?

Gorm 中的更新将created_at、updated_at 作为默认时间

错误:用户需要系统密码:postgres

我想优化查询SQL

Postgres 视图定义 (pgAdmin) 被删除了 comments ?

Postgresql:创建默认表空间的视图和使用?

SELECT INTO 具有多个归因

timezone date_trunc 函数

如何查询存储在数组中的 Rails ActiveRecord 数据

从 PostgreSQL 中的字段中提取数字

sql语句错误:column .. does not exist

H2 postgresql mode模式似乎不起作用

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

在 postgresql 中将 bool 转换为 int

将 csv 文件中存在的 NULL 值复制到 postgres

PostgreSQL 无法启动:server.key具有组或世界访问权限

postgres LISTEN/NOTIFY rails