栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PostgreSQL:在所有表字段的长度上创建索引

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PostgreSQL:在所有表字段的长度上创建索引

要测量文本表示形式中行的大小,您可以将整个行都转换为文本,这比连接单个列要快得多:

SELECt length(profile::text) FROM profile;

但是索引中的此表达式存在3(或4)个问题:

  1. profile::text不接受语法速记CREATE INDEX,您需要在标准语法中添加额外的括号或默认值cast(profile AS text)

  2. @jjanes已经讨论了同样的问题:IMMUTABLE索引表达式中仅允许使用函数,而将行类型强制转换为text不满足此要求。您可以IMMUTABLE像Jeff概述的那样构建伪造的包装函数。

  3. 存在一个固有的歧义(也适用于Jeff的答案!):如果列名与表名相同(这是一种常见情况),则您不能引用行类型,CREATE INDEX因为标识符始终解析为列名优先。

  4. 与原始版本的微小差异:这会在text表示中添加列分隔符,行装饰符和可能的转义字符。与您的用例无关紧要。

但是,我建议使用更激进的替代方法作为行大小的粗略指标:

pg_column_size()
。甚至更短,速度更快,避免了问题1,3和4:

SELECt pg_column_size(profile) FROM profile;

但是,问题2仍然存在:pg_column_size()也是STABLE。您可以创建一个简单且便宜的SQL包装函数:

CREATE OR REPLACE FUNCTION pg_column_size(profile)  RETURNS int LANGUAGE sql IMMUTABLE AS'SELECT pg_catalog.pg_column_size($1)';


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号