-- Create table
create table TDDEMO
(
UID NUMBER(13) not null,
LID NUMBER(7) not null,
START_DATE DATE not null,
END_DATE DATE not null,
EXPIRE_DATE DATE not null,
NAME VARCHAR2(16) default 0,
UPDATE_DATE DATE default SYSDATE
);
两个索引:
create index TDDEMO_INDEX1 on TDDEMO (UID, LID)
create index TDDEMO_INDEX2 on TDDEMO (EXPIRE_DATE)
大约600万数据,
我有如下两种语句需要很频繁的执行,
Select UID, LID, NAME from TDDEMO where UID >= XX and UID <= YY and LID = ZZ order by UID ;执行需要 17ms, 说明,每次结果大约1000条,
Delete from TDDEMO where expire_date < sysdate; 基本不花时间,
大家看看我可以怎么优化一些,期望查询语句能更快。
分享到:
------解决方案-------------------- 看一下查询计划
另外 LID 字段的区分度高吗?
考虑一下在LID 字段上加索引? ------解决方案--------------------
1)不必麻烦在LID上单独建立索引了、LID会用上复合索引 TDDEMO_INDEX1
2)明白主键的作用就不会这么想了、主键是负责"外交"的、你2个频繁sql都不做关联、没必要建
3)感觉你的sql可优化的空间不会很大了哈、order by UID 已经在索引里面帮你搞好了、这部分没有开销
4)贴上执行计划来看看吧