db2中函数索引吗?

[复制链接]
查看11 | 回复9 | 2010-3-1 11:19:53 | 显示全部楼层 |阅读模式
有个SQL ,WHERE 中个函数LCASE(列)
select count(*) from enduser where User_GroupDN = ? and LCASE
(User_EnglishName) = ?
在ORACLE中可以建立一个函数索引,在DB2中怎么办能提高查询速度??
谢谢!!!!
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
好像没有
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
又不能改程序中的SQL,怎么办呢?

谢谢!!!
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
例如:在AAA表中加入一列,AA4 此列是AA1列的小写
然后在AA4上建立索引,当以AA1列的小写为查询条件时
优化器会使用AA4上的索引。
CREATE TABLE DB2INST1.AAA ("AA1" CHARACTER (10)NOT NULL , "AA2" CHARACTER (10) , "AA3" CHARACTER (10) , "AA4" CHARACTER (10)NOT NULL GENERATED ALWAYS AS (lcase(aa1)) )
create index idx_aa1 on aaa(aa4)
select count(*) from aaa wherelcase(aa1)='aa'
下面是在一个已经存在数据的表上做的操作:
SET INTEGRITY FOR INSTANCE1.DETAILTBL OFF;
ALTER TABLE INSTANCE1.DETAILTBL
ADD COLUMN year_dob GENERATED ALWAYS (YEAR(DOB));
SET INTEGRITY FOR INSTANCE1.DETAILTBL
IMMEDIATE CHECKED FORCE GENERATED;

CREATE INDEX
INSTANCE1.IDX0001 ON INSTANCE1.DETAILTBL (PPLINX ASC, YEAR_DOB ASC) PCTFREE 10 MINPCTUSED 10

The DB2 optimizer will replace YEAR(DOB) with YEAR_DOB in your queries
and thsu pick up the index.
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
不错,这是一个变通的办法


回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
我昨天发了个application connect 帖子,你帮忙看看
谢谢!!!
http://www.itpub.net/526853.html
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
授个精


回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层


最初由 diablo2 发布
[B]授个精

[/B]

回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
最初由 k2001 发布
[B]select count(*) from aaa where lcase(aa1)='aa' [/B]

这地方是不是必须这么写?
select count(*) from aaa where aa4='aa'
要不然,索引能用到吗?
回复

使用道具 举报

千问 | 2010-3-1 11:19:53 | 显示全部楼层
k2001的写法是可以的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行