这个语句应该如何建立索引呢

coolmasoft 2009-03-10 03:35:37
select * from a where f=0 and d>sysdate-3 order by id desc

建立 f 和 d 字段的联合索引不起作用,好像因为d字段是范围查询,不走索引。
有什么好办法?
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bai_jiong 2009-03-15
  • 打赏
  • 举报
回复
可以创建以下的索引:

create index ind_fd on a(f,d);

然后改写一下你的SQL语句:

select * from a where f=0 and d>=sysdate-2 order by id desc;
多壮志 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happy84911 的回复:]
索引不会在SQL语句体现出来的,
索引的作用在于提高查询效率,降低查询时的资源利用。
一个基表不能建太多的索引;
空值不能被索引
只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
对表进行insert,update,delete处理时,由于要将表的存放位置记录到索引项中  而会降低一些速度。
[/Quote]

一知半解!
codearts 2009-03-15
  • 打赏
  • 举报
回复
试下这2种:
create index ind_fd on a(f,d, id);

create index ind_fd on a(f,d, id desc);
wangsong145 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 coolmasoft 的帖子:]
select * from a where f=0 and d>sysdate-3 order by id desc

建立 f 和 d 字段的联合索引不起作用,好像因为d字段是范围查询,不走索引。
有什么好办法?
[/Quote]
字段是怎么查询的跟索引没有关系的啊
liuyi8903 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happy84911 的回复:]
....
只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
.....
[/Quote]

从哪里来的观点?

可以这么说,不管是unique还是一般的普通index,

这不是区别性能的根本,通常来说,在同样的结果集返回率的情况下,3个左右的IO都能完成索引扫描,这不取决于是什么索引类型,

而是取决于你的索引的构造,如CF和blevel等.

当然还有CBO的选择,统计信息的差异.

因此不是说提高30%还是多少,而是根据很多东西来决定的. oracle中有太多的因素会影响你的查询.因此不能一概而论.
zcs_1 2009-03-10
  • 打赏
  • 举报
回复
看是否走索引,用set autotrace on,查询后会显示执行计划,看看是不是用了索引.
happy84911 2009-03-10
  • 打赏
  • 举报
回复
索引不会在SQL语句体现出来的,
索引的作用在于提高查询效率,降低查询时的资源利用。
一个基表不能建太多的索引;
空值不能被索引
只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
对表进行insert,update,delete处理时,由于要将表的存放位置记录到索引项中 而会降低一些速度。
Andy__Huang 2009-03-10
  • 打赏
  • 举报
回复
你什么知道它不起作用呢?

create index idx_tb on tb (f,d);
xanaduwpz 2009-03-10
  • 打赏
  • 举报
回复
索引跟范围查询没多大关系吧?

学习

17,377

社区成员

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

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