怎么优化这个查询

人在江湖漂那能不挨刀 2008-03-28 01:57:58
我的系统有一张人口基本信息表,有219万数据,表信息如下,
CREATE TABLE psbw_rkjbxx
(rid NUMBER NOT NULL,
gjdq NVARCHAR2(6) DEFAULT ('156') NOT NULL,
ewx NVARCHAR2(32) DEFAULT (' '),
ewm NVARCHAR2(32) DEFAULT (' '),
zwx NVARCHAR2(24) DEFAULT (' '),
zwm NVARCHAR2(36) DEFAULT (' '),
xm NVARCHAR2(60) NOT NULL,
cym NVARCHAR2(60),
xb NVARCHAR2(12) NOT NULL,
mz NVARCHAR2(12),
csrq DATE NOT NULL,
gmsfhm NVARCHAR2(36) DEFAULT (' '),
ssxq NVARCHAR2(12),
xz NVARCHAR2(140),
zjmc1 NVARCHAR2(12),
zjhm1 NVARCHAR2(36),
yxq1 DATE,
zjmc2 NVARCHAR2(12),
zjhm2 NVARCHAR2(36),
yxq2 DATE,
tzse NUMBER(8,2) DEFAULT (0.00),
zzmm NVARCHAR2(12),
hyzk NVARCHAR2(12),
whcd NVARCHAR2(12),
sf NVARCHAR2(12),
dwcsid NUMBER,
fwcs NVARCHAR2(80),
rzsj DATE,
zy NVARCHAR2(12),
yddh1 NVARCHAR2(60),
gzdxf NCHAR(2) DEFAULT ('n') NOT NULL,
bz NVARCHAR2(512),
sxym NCHAR(2) DEFAULT ('n'),
kqym NCHAR(2) DEFAULT ('n'),
rwsj DATE,
twsj DATE,
fybd NVARCHAR2(128),
jrsf NVARCHAR2(12),
jg NVARCHAR2(12),
zjxy NVARCHAR2(12),
byzk NVARCHAR2(12),
mxtz NVARCHAR2(128),
tlyxq NVARCHAR2(20),
rjka NVARCHAR2(40),
rjrq DATE,
ddrq DATE,
lzrq DATE,
tlsy NVARCHAR2(40),
jddx NVARCHAR2(100),
tc NVARCHAR2(128),
wdcjszh NVARCHAR2(40),
wdccph NVARCHAR2(40),
wdclx NVARCHAR2(12),
sg NVARCHAR2(20),
gwrq NVARCHAR2(1024),
lkrq DATE,
sf1 NVARCHAR2(12),
tc1 NVARCHAR2(12),
jddwlxdh NVARCHAR2(60),
rwtyqk NVARCHAR2(512),
zdylb NVARCHAR2(24),
lastupdatetime DATE)
PCTFREE 10
INITRANS 1
MAXTRANS 255
TABLESPACE psbw_db
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
/


-- Indexes for PSBW_RKJBXX

CREATE INDEX idx_psbw_rkjbxx_csrq ON psbw_rkjbxx
(
csrq ASC
)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE psbw
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOLOGGING
/
CREATE INDEX idx_psbw_rkjbxx_gmsfhm ON psbw_rkjbxx
(
gmsfhm ASC
)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE psbw
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOLOGGING
/
CREATE INDEX idx_psbw_rkjbxx_xm ON psbw_rkjbxx
(
xm ASC
)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE psbw
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOLOGGING
/
CREATE INDEX idx_psbw_rkjbxx_xz ON psbw_rkjbxx
(
xz ASC
)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE psbw
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOLOGGING
/


-- Constraints for PSBW_RKJBXX

ALTER TABLE psbw_rkjbxx
ADD PRIMARY KEY (rid)
USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE psbw_db
STORAGE (
INITIAL 65536
MINEXTENTS 1
MAXEXTENTS 2147483645
)
/

其中有两个字段:gwrq(高危人群),gzdxf(工作对象否)做条件查询时候速度很慢。

这219万数据:1. gwrq 大部分数据是空, 当我用到: gwrq is not null 做条件查询数度很慢,
2.gzdxf大部分值是‘n’,少部分值是:‘y’ 但我用:gzdxf =‘n’ 速度快,gzdxf =‘y’查询需要40多分钟。查询数据多反而快。

我怎么优化.
...全文
80 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wll123a123 2008-03-29
  • 打赏
  • 举报
回复
在 gwrq 上建normal index
在gzdxf建bitmap index
  • 打赏
  • 举报
回复
大家有没有什么好的办法啊
iihero 2008-03-29
  • 打赏
  • 举报
回复
我的建议:
1. 对gwrq 建立常规索引
2.gzdxf大部分值是‘n’,少部分值是:‘y’
对其建立位图索引,
应该可以大符提升效率。
  • 打赏
  • 举报
回复
up
harbey 2008-03-28
  • 打赏
  • 举报
回复
数据量大做查询必定会慢
你可以做表分区,或者按照年份把不同的数据放在不同的服务器上面
  • 打赏
  • 举报
回复
这219万数据:1. gwrq 大部分数据是空, 当我用到: gwrq is not null 做条件查询数度很慢,

改为 gwrq > ''
2.gzdxf大部分值是‘n’,少部分值是:‘y’ 但我用:gzdxf =‘n’ 速度快,gzdxf =‘y’查询需要40多分钟。查询数据多反而快。
改为 gzdxf > 'n'

===========================
这样改反而更加慢
小兽 2008-03-28
  • 打赏
  • 举报
回复
这219万数据:1. gwrq 大部分数据是空, 当我用到: gwrq is not null 做条件查询数度很慢,

改为 gwrq > ''
2.gzdxf大部分值是‘n’,少部分值是:‘y’ 但我用:gzdxf =‘n’ 速度快,gzdxf =‘y’查询需要40多分钟。查询数据多反而快。
改为 gzdxf > 'n'
richard360347477 2008-03-28
  • 打赏
  • 举报
回复
对gwrq,gzdxf建立normal index

1,617

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧