https://use-the-index-luke.com/sql/where-clause/functions/case-insensitive-search
此页面描述了我遇到的问题和可能的解决方案。
总结一下问题,我想使用ï
获得所有与查询匹配的结果。如果我在where UPPER(some_column) = UPPER(@param)
上不使用UPPER
,则有一个返回<50ms的索引。由于该表仅在some_column
上而不是在该列的UPPER
值上被索引,因此使用some_column
进行相同的查询需要花费4秒钟以上的时间。
作者提出以下建议:
要支持该查询,我们需要一个涵盖实际搜索的索引 术语。这意味着我们不需要LAST_NAME上的索引,但需要 UPPER(LAST_NAME):
UPPER
其定义包含函数或表达式的索引为 所谓的基于功能的索引(FBI)。而不是复制列 数据直接进入索引,基于函数的索引将 首先执行功能,然后将结果放入索引。结果, 索引以所有大写字母形式存储名称。
Spanner是否支持执行此操作的方法?如果不是,什么是替代品?
我尝试创建像这样的基于函数的索引,但是出现语法错误,使我认为Cloud Spanner DDL中不允许使用函数
CREATE INDEX emp_up_name
ON employees (UPPER(last_name))
答案 0 :(得分:0)