为什么加了索引执行更慢了呢?
表结构如下:
-- Create tablecreate table T_GG_MOBILENO_SENDABLE( sendable_id NUMBER(10) not null, mobileno_id NUMBER(10), mobileno NUMBER(11), mobileno_kind NUMBER(4), mobileno_age NUMBER(4), mobileno_money NUMBER(8), mobileno_area NVARCHAR2(6), mobileno_sex NUMBER(1), mobileno_double NUMBER(1), mobileno_treble NUMBER(1))tablespace GXT pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );-- Create/Recreate indexes create index INDEX_T_GG_MOBILENO_AGE on T_GG_MOBILENO_SENDABLE (MOBILENO_AGE) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_AREA on T_GG_MOBILENO_SENDABLE (MOBILENO_AREA) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_DOUBLE on T_GG_MOBILENO_SENDABLE (MOBILENO_DOUBLE) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_KIND on T_GG_MOBILENO_SENDABLE (MOBILENO_KIND) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_MONEY on T_GG_MOBILENO_SENDABLE (MOBILENO_MONEY) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_SENDABLE on T_GG_MOBILENO_SENDABLE (MOBILENO) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_SEX on T_GG_MOBILENO_SENDABLE (MOBILENO_SEX) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );create index INDEX_T_GG_MOBILENO_TREBLE on T_GG_MOBILENO_SENDABLE (MOBILENO_TREBLE) tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );-- Create/Recreate primary, unique and foreign key constraints alter table T_GG_MOBILENO_SENDABLE add constraint PK_T_GG_MOBILENO_SENDABLE primary key (SENDABLE_ID) using index tablespace GXT pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );
select count( distinct( MOBILENO)) from t_gg_mobileno_sendable a WHERE (MOBILENO_KIND = 1 and MOBILENO_AGE >= 0 and MOBILENO_AGE <= 99 and MOBILENO_MONEY between 0 and 999)
最好把前后的执行计划贴出来,看一下!
[解决办法]
楼主贴一下执行计划。
关于在count中添加索引的,是需要使用到函数索引的。
可以参考:http://bbs.51cto.com/thread-26271-1.html
[解决办法]
从这个执行计划来说,应该不会很慢啊~~~
物理读在99408 ~~~
楼主,你这个数据量大概有多大??
[解决办法]
楼主的索引不会对效率有多大的帮助甚至可能比不走索引更慢,仔细看下便知:MOBILENO_AGE>=0 AND MOBILENO_AGE<=99这个条件估计包含了所有的数据,所以索引在查询的时候不会有什么帮助,再有distinct不会用到索引, 你的MOBILENO建了索引,应改为group by方式
SELECT COUNT(MOBILENO) FROM (SELECT A.MOBILENO FROM T_GG_MOBILENO_SENDABLE A WHERE A.MOBILENO_KIND = 1 AND MOBILENO_AGE >= 0 AND A.MOBILENO_AGE <= 99 AND A.MOBILENO_MONEY BETWEEN 0 AND 999 GROUP BY A.MOBILENO)
[解决办法]