我知道在Oracle中有一种名为DOMAIN INDEX的东西。但是在DB2中如何?
我的大表中有陈述:
SELECT * from TABLE where (upper(COLUMN1) like '%HGW%'))
由于UPPER和LIKE,COLUMN1上的常规正常INDEX没有帮助。 创建一些强大的索引的语法是什么,这将对此UPPER和LIKE语句产生影响以获得此查询的快速结果? 我会感谢榜样和帮助。 不幸的是,我无法删除nethier first%或second%。
答案 0 :(得分:0)
首先,无论何时在列上运行upper
或lower
等函数,都不会使用该列上的索引,并且RDBMS将采用全表扫描。要使索引起作用,应该保留该列。甚至:
SELECT col1 from table where col2+1 = 3
将无效,因为您正在列上运行函数(添加),因此将不会使用col2
上的索引(如果有)。因此,您必须将其更改为:
SELECT col1 from table where col2 = 3-1
第二件事,当模式以通配符开头时,如*
或.
,也不会使用索引,因为正如您可以轻易猜到的那样,RDBMS将无法使用知道列值以哪个字符开头。所以有两个步骤:
首先,更改排序规则,以便foo
同时匹配Foo
和fOo
。这样就可以了解upper
。
其次,你必须照顾通配符部分。如果在HG
之前确实允许有许多字符,那么最好的选择是使用全文索引(dunno是否有DB2)。此索引专门为此目的而构建,全文搜索,因此您可以使用它。当然,它会消耗更多资源,因为索引结构相当精细,但你必须忍受它。