tongchenkeji 发表于:2023-4-27 8:25:220次点击 已关注取消关注 关注 私信 adb不支持函数索引,不支持虚拟列,那么如果使用 where 函数(列) ,这种能走索引吗?[阿里云云原生数据仓库] 暂停朗读为您朗读 adb不支持函数索引,不支持虚拟列,那么如果使用 where 函数(列) ,这种能走索引吗? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 云原生数据仓库AnalyticDB# 云原生数据仓库 AnalyticDB PostgreSQL版825# 索引205
一位隐者AM 2023-11-27 22:35:54 2 阿里云ADB不支持函数索引和虚拟列,但是对于使用WHERE函数或列的查询,是否能够走索引,需要根据具体情况来确定。 如果WHERE语句中的函数或列是直接引用表中的列,且该列已经建立索引,那么这种情况下查询可以走索引。例如,对于类似于 SELECT * FROM table WHERE age + 1 = 18 的查询,如果age列已经建立了索引,则查询可以走索引。但是如果将age + 1改成abs(age) + 1,则因为函数索引不被支持,查询无法走索引,会使用全表扫描的方式进行查询。 如果WHERE语句中的函数或列涉及到计算,涉及的函数、表达式或者列不存在索引,则该查询无法走索引,会使用全表扫描的方式进行查询。 另外,建议在您的表设计中,尽量避免直接使用函数做为WHERE条件。如果函数不可避免,则可以通过先将函数结果存放到一个列中,再对这个列建立索引来进行优化。
可以的。adb中用了函数 索引也可以生效的,此回答整理自钉群“云数据仓库ADB-开发者群”
阿里云ADB不支持函数索引和虚拟列,但是对于使用WHERE函数或列的查询,是否能够走索引,需要根据具体情况来确定。
如果WHERE语句中的函数或列是直接引用表中的列,且该列已经建立索引,那么这种情况下查询可以走索引。例如,对于类似于 SELECT * FROM table WHERE age + 1 = 18 的查询,如果age列已经建立了索引,则查询可以走索引。但是如果将age + 1改成abs(age) + 1,则因为函数索引不被支持,查询无法走索引,会使用全表扫描的方式进行查询。
如果WHERE语句中的函数或列涉及到计算,涉及的函数、表达式或者列不存在索引,则该查询无法走索引,会使用全表扫描的方式进行查询。
另外,建议在您的表设计中,尽量避免直接使用函数做为WHERE条件。如果函数不可避免,则可以通过先将函数结果存放到一个列中,再对这个列建立索引来进行优化。