当前位置: 首页 > 面试题库 >

PostgreSQL-查询HSTORE值的GIN索引

潘灵均
2023-03-14
问题内容

我有以下构造函数(作为测试):

CREATE TABLE product (id BIGSERIAL PRIMARY KEY, ext hstore);
CREATE INDEX ix_product_ext ON product USING GIN(ext);

INSERT
INTO    product (id, ext)
SELECT  id, ('size=>' || CEILING(10 + RANDOM() * 90) || ',mass=>' || CEILING(10 + RANDOM() * 90))::hstore
FROM    generate_series(1, 100000) id;

我有以下查询,可以正常运行:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  (ext->'size')::INT >= 41
    AND    (ext->'mass')::INT <= 20
) T

但我相信执行此操作的正确方法是使用@>运算符。我有以下内容,但它给出了语法错误:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  ext @> 'size>=41,mass<=20'
) T

我该怎么写呢?


问题答案:

阅读hstore文档(您的(最后一个查询))size>=41并不意味着“当大小大于或等于41时”:

text => text    make single-pair hstore

之后,您将无法编写mass<=20,因为没有这样的操作。使用@>运算符:

hstore @> hstore    does left operand contain right?

你可以写:

SELECT count(id)
FROM product
WHERE ext @> 'size=>41,mass=>20';

但是,只需要尺寸等于41且质量等于20的这些产品。



 类似资料:
  • 问题内容: 尽管所有文档都说了什么,但我发现pg_trgm相关搜索的GIN索引要比GIST索引慢得多。该表位于2500万行的表中,该表的文本字段相对较短(平均长度为21个字符)。文本的大多数行都是“ 123 Main st,City”格式的地址。 GIST索引大约需要4秒钟的搜索时间,例如 但是,使用以下命令运行时,GIN需要90秒,并且得到以下结果: 请注意,即使实际上只有40k行匹配,索引也选

  • 问题内容: 我有一张表,其中一列有一个数组-但以文本格式存储: 我想在列中查找所有值为5的记录作为数组元素。 我试图通过使用“字符串数组”功能并使用该功能删除符号来实现这一点,但是找不到办法。 问题答案: 您可以这样做:http : //www.sqlfiddle.com/#!1/5c148/12 输出: 您也可以使用bool_or:http ://www.sqlfiddle.com/#!1 /

  • 主要内容:SELECT 语句中的子查询使用,INSERT 语句中的子查询使用,UPDATE 语句中的子查询使用,DELETE 语句中的子查询使用子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。 一个 SELECT 语句的查询结果能够作为另一个语句的输入值。 子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。 以下是子查询必须遵循的几个

  • 问题内容: 给定一个PostgreSQL表,该表具有一个名为的列和一个约束,如下所示: 在这种情况下,我可以提取有关此约束的信息: 但是是否有可能编写一个专门返回未决,成功,失败的查询? 能够在我的应用程序中记住此查询的结果,而不需要维护重复的副本,将是很棒的。 问题答案: 您可以查询系统目录,例如: 使用以下函数 解压缩 字符串:

  • 问题内容: 我有一个表,其中列上有部分索引。 如果我执行简单查询,则使用索引: 但是如果我使用它进行查询,则不会使用索引: 为什么在第二种情况下不使用索引?有什么办法可以加快这个查询? (请注意,在此示例中,我已截断了数组,并测试了更多元素,但结果却相同,缓慢) 问题答案: 实际上,它 正在 使用索引。只是做不同的事情。 索引扫描一行一行地访问,以随机顺序从一个磁盘页面到下一个磁盘页面来回移动。

  • 问题内容: 有没有办法使用PostgreSQL json / hstore ?esp查询支持。 例如: hstore: 对于杰森 问题答案: 尽管对于答案(对于插入部分)而言为时已晚,但我希望对其他人可能有用: 在HashMap中获取键/值对: 使用以下方式之一将它们插入PostgreSQL: 1) 2) 3)在POJO中设置hstoreMap / jsonbObj(Map类型的hstoreCol