查询排序的时候优化器怎么判断是否走索引?

dumpling_tyy 2015-05-17 10:11:41
在Oracle自带的hr下,该查询语句的执行计划是走索引,而且自动是索引逆序的全扫描:
select * from EMPLOYEES order by employee_id desc


这是实际项目里的一张表,数据量18W,也是按主键排序,但是直接走了全表扫描,强制走索引之后也是按顺序走索引,取出所有数据,然后再排序,为什么不会像上面那样自动逆序走索引呢?内存排序太费时间了!
select /*+INDEX(reg PK_BD_SUPPLIER_GOODS_REG)*/ * from bd_goods_reg reg order by reg.reg_id desc

...全文
287 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dumpling_tyy 2015-05-18
  • 打赏
  • 举报
回复
引用 1 楼 wildwave 的回复:
优化器比较不同执行计划中的成本,选取较小的那一个 你这里,如果走索引,所有的值都要重新根据rowid到表中走一遍,显然不如直接全表扫描 如果是这个语句,则另当别论: select employee_id from EMPLOYEES order by employee_id
但是优化器都不计算排序的开销吗?测试的结果是如果走索引,查询速度非常快,如果走全表扫描,那排序花的时间非常长,30秒都出不来
小灰狼W 2015-05-18
  • 打赏
  • 举报
回复
优化器比较不同执行计划中的成本,选取较小的那一个 你这里,如果走索引,所有的值都要重新根据rowid到表中走一遍,显然不如直接全表扫描 如果是这个语句,则另当别论: select employee_id from EMPLOYEES order by employee_id
相关推荐
发帖
Oracle 高级技术

3476

社区成员

Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
帖子事件
创建了帖子
2015-05-17 10:11
社区公告
暂无公告