使用LIKE运算符时的SQL INDEX(DB2)

时间:2012-10-11 08:58:41

标签: sql indexing db2

我知道在Oracle中有一种名为DOMAIN INDEX的东西。但是在DB2中如何?

我的大表中有陈述:

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

由于UPPER和LIKE,COLUMN1上的常规正常INDEX没有帮助。 创建一些强大的索引的语法是什么,这将对此UPPER和LIKE语句产生影响以获得此查询的快速结果? 我会感谢榜样和帮助。 不幸的是,我无法删除nethier first%或second%。

1 个答案:

答案 0 :(得分:0)

首先,无论何时在列上运行upperlower等函数,都不会使用该列上的索引,并且RDBMS将采用全表扫描。要使索引起作用,应该保留该列。甚至:

SELECT col1 from table where col2+1 = 3

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

SELECT col1 from table where col2 = 3-1

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

首先,更改排序规则,以便foo同时匹配FoofOo。这样就可以了解upper

其次,你必须照顾通配符部分。如果在HG之前确实允许有许多字符,那么最好的选择是使用全文索引(dunno是否有DB2)。此索引专门为此目的而构建,全文搜索,因此您可以使用它。当然,它会消耗更多资源,因为索引结构相当精细,但你必须忍受它。