我有一个查询,我在其中搜索一个字符串:
SELECT county FROM city WHERE UPPER(name) = 'SAN FRANCISCO';
现在,这工作正常,但扩展性不佳,我需要对其进行优化。我有 found an option沿着创建生成的 View 或类似的东西的思路,但我希望有一个使用索引的更简单的解决方案。
我们正在使用 DB2,我真的很想使用 expression in an index ,但是这个选项似乎只在 z/OS 上可用,但是我们运行的是 Linux。无论如何我都尝试了表达式索引:
CREATE INDEX city_upper_name_idx
ON city UPPER(name) ALLOW REVERSE SCANS;
当然,它会在 UPPER(name) 上阻塞。
是否有另一种方法可以创建索引或类似的东西,这样我就不必重组现有查询以使用新生成的 View ,或更改现有列或任何其他此类侵入性更改?
编辑:我愿意听取其他数据库的解决方案...它可能会转移到 DB2...
最佳答案
您可以添加一个索引列,其中包含城市名称的数字哈希键。 (允许重复)。
然后你可以做一个多子句:
hash = [compute hash key for 'SAN FRANCISCO']
SELECT county
FROM city
WHERE cityHash = hash
AND UPPER(name) = 'SAN FRANCISCO' ;
或者,阅读您的数据库手册并查看用于创建表索引的选项。可能会有帮助。
关于sql - 数据库不区分大小写索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12855/