4

我知道在 Oracle 中有一个叫做 DOMAIN INDEX 的东西。但在 DB2 中如何?

我的大桌子上有声明:

SELECT * from TABLE where (upper(COLUMN1) like '%HGW%'))

由于 UPPER 和 LIKE,COLUMN1 上的常规正常 INDEX 不会有帮助。创建一些强大的索引的语法是什么,它将影响这个 UPPER 和 LIKE 语句以获得这个查询的快速结果?我会很感激的例子和帮助。不幸的是,我无法删除第一个 % 或第二个 %。

4

1 回答 1

0

首先,每当您在列上运行类似upper或的函数时lower,该列上的索引将不会被使用,RDBMS 将诉诸全表扫描。要使索引正常工作,该列应单独保留。甚至:

SELECT col1 from table where col2+1 = 3

不起作用,因为您正在列上运行函数(添加),因此col2不会使用索引(如果有)。因此,您必须将其更改为:

SELECT col1 from table where col2 = 3-1

第二件事,当模式以通配符开头时,例如*or .,索引也不会被使用,因为您可以很容易地猜到,RDBMS 将无法知道列值以哪个字符开头。所以有两个步骤:

首先,更改您的排序规则,以便同时foo匹配. 这样就得到了照顾。FoofOoupper

其次,您必须注意通配符部分。如果之前确实允许有很多字符HG,那么最好的办法是使用全文索引(不知道 DB2 是否有)。这个索引是专门为这些目的而构建的,全文搜索,所以你可以利用它。当然,它会消耗更多的资源,因为索引结构非常复杂,但你必须忍受它。

于 2012-10-11T09:38:45.897 回答