当前位置:  数据库>oracle

使用倒序索引提升ORDER BY DESC性能

    来源: 互联网  发布时间:2017-05-24

    本文导语: 使用倒序索引(INDEX DESC),可以大幅提升带有order by desc子句的SQL语句性能。  一、场景 1、表名:test_t,有一字段名为object_id 2、总数据量:580000行,segment_size:72MB 3、Where条件(Owner=’SYS’ and Object_id>50000)的行数:32472行 4、S...

使用倒序索引(INDEX DESC),可以大幅提升带有order by desc子句的SQL语句性能。 

一、场景

1、表名:test_t,有一字段名为object_id

2、总数据量:580000行,segment_size:72MB

3、Where条件(Owner=’SYS’ and Object_id>50000)的行数:32472行

4、SQL语句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc

5、希望借助倒序索引,提升order by object_id desc的性能

二、B*树倒序索引(DESC)比 B*树索引(默认为ASC升序)带来的性能提升对比

1、采用B*树倒序索引(DESC),COST:4,执行计划走的INDEX RANGE SCAN

SQL语句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc

索引方式

createindex idx_test_t_id_DESC on test_t(owner,object_id desc)

COST

与执行计划

Description

Object owner

Object name

Cost

Cardinality

Bytes

SELECT STATEMENT, GOAL = FIRST_ROWS

 

 

4

94298

9806992

 TABLE ACCESS BY INDEX ROWID

SYS

TEST_T

4

94298

9806992

  INDEX RANGE SCAN

SYS

IDX_TEST_T_ID_DESC

3

1

 

 

 

2、采用B*树索引(默认为ASC),COST:94103,执行计划走的INDEX RANGE SCAN DESENDING

索引方式

createindex idx_test_t_id_DESC on test_t(owner,object_id)

COST

与执行计划

Description

Object owner

Object name

Cost

Cardinality

Bytes

SELECT STATEMENT, GOAL = FIRST_ROWS

 

 

94103

93792

9097824

 TABLE ACCESS BY INDEX ROWID

SYS

TEST_T

94103

93792

9097824

  INDEX RANGE SCAN DESCENDING

SYS

IDX_TEST_T_ID_ASC

287

93792

 

 

 

总结:

索引方式

COST

执行计划

(owner,object_id desc)

4

INDEX RANGE SCAN

(owner,object_id)

94103

INDEX RANGE SCAN DESENDING

 

三、实际测试过程

SQL语句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc

1、采用B*树倒序索引(DESC)测试过程与结果

(1)test_t表上创建(OWNER+OBJECT_ID DESC)的倒序索引

   SQL>create index idx_test_t_id_DESC on test_t(owner,object_id desc)

(2)重新收集统计信息

  SQL> execdbms_stats.gather_table_stats(ownname=>'SYS',tabname => 'TEST_T',estimate_percent=> 20 , cascade=> TRUE );

(3)SQL执行计划与COST 

 Description

Object owner

Object name

Cost

Cardinality

Bytes

SELECT STATEMENT, GOAL = FIRST_ROWS

 

 

4

94298

9806992

 TABLE ACCESS BY INDEX ROWID

SYS

TEST_T

4

94298

9806992

  INDEX RANGE SCAN

SYS

IDX_TEST_T_ID_DESC

3

1

 

2、B*树索引(默认为ASC升序)测试过程与结果

(1)test_t表上创建(OWNER+OBJECT_ID)的普通默认ASC索引

  SQL>create index idx_test_t_id_ASC on test_t(owner,object_id)

(2)重新收集统计信息

  SQL> execdbms_stats.gather_table_stats(ownname=>'SYS',tabname => 'TEST_T',estimate_percent=> 20 , cascade=> TRUE );

(3)SQL执行计划与COST

 Description

Object owner

Object name

Cost

Cardinality

Bytes

SELECT STATEMENT, GOAL = FIRST_ROWS

 

 

94103

93792

9097824

 TABLE ACCESS BY INDEX ROWID

SYS

TEST_T

94103

93792

9097824

  INDEX RANGE SCAN DESCENDING

SYS

IDX_TEST_T_ID_ASC

287

93792

 


    
 
 

您可能感兴趣的文章:

  • SQL Server 索引结构及其使用(一)--深入浅出理解索引结构第1/4页
  • sql server对索引的使用
  • 解决多级索引速度慢的问题可否像解决多级页表那样使用TLB?
  • mysql中索引使用不当速度比没加索引还慢的测试
  • oracle10g全文索引自动同步语句使用方法
  • bitmap 索引和 B-tree 索引在使用中如何选择
  • C#入门之索引器使用实例
  • 在Oracle中监控和跟踪索引使用情况
  • 结构化文档全文索引的使用方式,以DB2 TIE为例,讲解一下结构化文档的全文索引的使用方法,希望对我的另一个帖子起到抛砖引玉的作用。
  • mysql5.6.19下子查询为什么无法使用索引
  • SQLSERVER全文目录全文索引的使用方法和区别讲解
  • SQL_Server全文索引的使用实例演示
  • 深度揭露Oracle索引使用中的限制
  • SQL Server 索引结构及其使用(二) 改善SQL语句第1/3页
  • MySQL索引使用全程分析
  • oracle 索引不能使用深入解析
  • SQL优化基础 使用索引(一个小例子)
  • MySQL索引类型总结和使用技巧以及注意事项
  • SQLSERVER如何查看索引缺失及DMV使用介绍
  • Sql Server 索引使用情况及优化的相关Sql语句分享
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能
  • 在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,