【问题标题】:How to convert number to text to avoid query cost如何将数字转换为文本以避免查询成本
【发布时间】:2016-01-31 07:31:33
【问题描述】:

我的查询条件如下

numeric_column = text_column::numeric

为我的方案获得更低的成本和罚款。但是当我通过休眠时,得到错误

"Not all named parameters have been set [:numeric]"

所以,我修改了我的查询如下

to_char(numeric_column, '9999999') = text_column

它工作正常,但我的查询解释显示上述查询的成本更高。

我怎样才能避免这种情况?有没有其他方法可以做到这一点?

(我用的是Postgresql-9.1,hibernate版本是4.1.0)

【问题讨论】:

  • 我现在找到了替代方案。 numeric_column = cast(text_column 为数字)。解释费用对我来说是可以的。
  • 真正的问题是:你为什么首先将数字存储在文本列中?
  • @horse,我从第三方表中获取该值,它们以文本形式存储。
  • 数据集的大小是多少? @斯派克

标签: hibernate postgresql type-conversion string-aggregation


【解决方案1】:

尝试查看Indexes on Expressions 并比较结果。 B-tree 索引默认应该没问题:

CREATE INDEX numeric_column_astext_btree ON your_table ((numeric_column::TEXT));

查询可以是这样的:

SELECT * FROM your_table WHERE numeric_column::TEXT = text_column;

但我同意上述 cmets 的观点,即使用适当的类型更有意义。您也没有指定索引结构\d your_tableEXPLAIN ANALYZE

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 2021-04-02
    • 1970-01-01
    • 2019-10-21
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多