Cloud Spanner:不区分大小写的查询即使在建立索引时也会非常慢

时间:2018-07-18 17:34:10

标签: google-cloud-platform google-cloud-spanner

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))

1 个答案:

答案 0 :(得分:0)

正如您所说,由于不受支持,因此无法在Cloud Spanner DDL中使用UPPER

您可以通过此链接[1]提出功能请求。

我能想到的唯一解决方法是更改​​数据,使它已经变为大写。