sql - 数据库不区分大小写索引?

标签 sql database oracle indexing db2

我有一个查询,我在其中搜索一个字符串:

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/

相关文章:

c# - MySql.Data.MySqlClient 命名空间与 System.Data.OracleClient 命名空间

java - 监听HBase表更新

php - 如何排除MySql中的某些记录

database - 在 postgresql 中以 block 的形式检索数据

Oracle - 如何从 sql Developer 生成脚本

sql - 如何抽象出子查询?

sql - 如何防止 Visual Basic 2012 中以下代码的 SQL 注入(inject)

MySQL - NOT IN WHERE 子句中的查询具有相同的结构,适用于第一个表但不适用于第二个表

php - 带有准备好的语句的简单 PHP 选择不显示任何结果

MySQL 多个连接在一个查询中具有多个计数