当前位置:首页 > 日记 > 正文

Oracle中下一个SQL语句的优化过程(更详细)

Oracle中下一个SQL语句的优化过程(更详细)
原来的说法是这样的:

选择和(sl0000)从xstfxps2哪里
dhao00在(
选择xstfxps1 TRUNC dhao00(ywrq00)= trunc(SYSDATE)
和khdm00 = '500000003913);
所用时间:00:02:49.04
U3000 U3000
执行计划
----------------------------------------------------------
0选择语句优化器=选择
10类(合计)
21嵌套循环
32访问表(全)of'xstfxps2
42表的访问(通过索引rowid)of'xstfxps1
54指数(独特的扫描)of'xstfxps1_pk(独特的)
U3000 U3000
统计
----------------------------------------------------------
0递归调用
0分贝块得到
17355138一致的获取
34141物理读
2912重做日志大小
198个字节通过网络发送给客户机
从客户端接收的275个字节
2 SQL*Net切换到/从客户端
0类(内存)
0类(磁盘)
1行处理
我们在数据上看到17355138个逻辑的读数,34141物理IO,这是相当可怕的数字。在执行计划中,我们看到桌上xstfxps2为全表扫描。
让我们看一下这两个表的总数据量。
SQL select count(*)>从xstfxps2;
U3000 U3000
计数(*)
----------
五百五十八万五千零一十八
我们在这里看到的,xstfxps2有记录5585018。
SQL select count(*)>从xstfxps1;
U3000 U3000
计数(*)
----------
七十万二千一百二十一
这两个表的表结构如下所示:
SQL> DESC xstfxps1
名称类型可为空的默认评论
-----------------------------------------
dhao00号(8)
lhdh00号码(8)Y
fldh00号码(8)Y
fplb00 VARCHAR2(2)Y
ywrq00日期
ywry00 VARCHAR2(8)Y
shrq00日期
xsqrrq日期
xsqrry VARCHAR2(8)Y
khdm00 VARCHAR2(12)
xkzh00 VARCHAR2(12)
ckdm00 VARCHAR2(2)Y
thckdm VARCHAR2(2)Y
xsfsdm VARCHAR2(2)Y
fxrydm VARCHAR2(4)Y
shrydm VARCHAR2(4)Y
shbj00 VARCHAR2(1)n
fxbj00 VARCHAR2(1)n
skbj00 VARCHAR2(2)Y
fkdm00 VARCHAR2(2)Y
U3000 U3000
SQL> DESC xstfxps2
名称类型可为空的默认评论
-----------------------------------------
dhao00号(8)
spdm00 VARCHAR2(8)
djia00数(7,2)0
fxsl00编号0
sl0000编号0
thsl00编号0
je0000编号0
se0000数Y
fpbbh0 VARCHAR2(11)Y
fphao0 VARCHAR2(10)Y
rbdh00号码(8)Y
U3000 U3000
的xstfxps1的客户订单,订单的客户信息、订单日期等on.xstfxps2是桌体的订单,客户订单的详细记录,商品的价格和数量信息。
U3000 U3000
第一步是调整查询提取,看语句的执行计划。一般来说,如果一个语句可以避免使用子查询,子查询是尽可能不使用。因为子查询的开销非常昂贵,重写声明如下:
选择和(sl0000)
从xstfxps2,(选择dhao00从xstfxps1 TRUNC(ywrq00)= trunc(SYSDATE)
和khdm00 = '500000003913)B
在a.dhao00 = b.dhao00;
所用时间:00:00:3.05
执行计划
----------------------------------------------------------
0选择语句优化器=选择
10类(合计)
21表的访问(通过索引rowid)of'xstfxps2
32嵌套循环
43访问表(全)of'xstfxps1
53指数(范围扫描)of'xstfxps2_pk(独特的)
统计
----------------------------------------------------------
0递归调用
0分贝块得到
11974一致的获取
225物理读
832重做日志大小
211个字节通过网络发送给客户机
从客户端接收的275个字节
2 SQL*Net切换到/从客户端
0类(内存)
0类(磁盘)
1行处理
U3000 U3000
我们可以看到,逻辑IO已经从原来的17355138到11974倍的下降,与水平的提高。执行时间也下降了超过3秒的时间从原来的近3分钟。很明显,性能有了很大的提高,但是我们看到有一个全表扫描表中在执行计划xstfxps1。总的来说,我们应该尽量避免全表扫描的存在,特别是对于大型的表,和适当的指标应设置避免FTS的一代。让我们在两个表的索引信息一看:
U3000 U3000
选择index_name,从dba_ind_columns哪里table_name like'xstfxps % column_name
index_name column_name
-----------------------------------------------------------------
xstfxps1_pk dhao00
xstfxps2_pk dhao00
xstfxps2_pk spdm00
U3000 U3000
我们看到除了主键约束外,这两个表没有其他索引,根据语句的查询情况,我们建立了下列复合索引:
创建xstfxps1指数idx_xstfxps1_khdm00_ywrq00(khdm00,ywrq00)表索引;
U3000 U3000
为了使用指标,我们必须对原有的日期字段的条件作一些调整。声明不会使用索引因为一个trunc()函数的存在。只要我们明白TRUNC(ywrq00)= trunc(SYSDATE)实际上是在ywrq00 TRUNC(系统日期),小于trunc(SYSDATE + 1)减一次,我们有一个更好的方式来处理它。
这个条件。最后重写的语句如下所示:
选择和(sl0000)
从xstfxps2,xstfxps1 B
在a.dhao00 = b.dhao00
和b.khdm00 = '500000003913
和b.ywrq00之间trunc(SYSDATE)
TRUNC(SYSDATE)+1 /(24×60×60);
执行计划
----------------------------------------------------------
0选择语句优化器=选择
10类(合计)
21表的访问(通过索引rowid)of'xstfxps2
32嵌套循环
43表的访问(通过索引rowid)of'xstfxps1
54指数(范围扫描)of'idx_xstfxps1_khdm00_ywrq00
(非唯一)
U3000 U3000
63指数(范围扫描)of'xstfxps2_pk(独特的)
统计
----------------------------------------------------------
0递归调用
0分贝块得到
3一致的获取
0物理读
0重做日志大小
210个字节通过网络发送给客户机
从客户端接收的275个字节
2 SQL*Net切换到/从客户端
0类(内存)
0类(磁盘)
1行处理
在这个时候,我们看到,逻辑IO已经减少到3倍,而且执行计划的句子也符合我们的调整目标,所创建的索引有更大的影响。

相关文章

MySQL错误指定的键太长;最大键长度

MySQL错误指定的键太长;最大键长度

错误,太长,长度为,电脑软件,MySQL,在查询之后,我知道MySQL字段设置得太长了,所以我改变了两个字段的长度。 在索引时,按键计算数据库的长度是将索引所用的所有字段的char长度累加起来,然后乘以以下比例,不超过密钥长度1000的限制: = 1 = 1字节字…

的Win8.1操作系统对硬件的要求是什

的Win8.1操作系统对硬件的要求是什

操作,硬件,系统对,电脑软件,注释:Windows将在更新之前检查系统是否符合要求,以确保系统能支持Windows 8.1预览。 Windows 8.1可以在支持Windows 8的相同硬件上运行良好: 处理器:1千兆赫或更快 内存:1 GB(32位)或2 GB(64位) 可用硬盘空间:16 GB(32位)或…

什么是postgres.exepostgres进程查

什么是postgres.exepostgres进程查

查询,进程,过程,电脑软件,postgres,点评:postgres.exe是PostgreSQL数据库管理程序 进程文件:Postgres或postgres.exe 进程名称:PostgreSQL主进程 过程类别:安全风险的过程 英文描述: postgres.exe是一个过程,属于PostgreSQL数据库管理、关系,它…

Oracle学习笔记-新用户和构建表

Oracle学习笔记-新用户和构建表

新用户,学习笔记,电脑软件,Oracle,1。与用户有关的SQL语句 新用户 创建由2013标识的用户SA; 描述:SA用户名,2013密码 授权的连接,资源给用户 将连接、资源授予SA; 描述:连接角色:授予最终用户的典型权限,最基本的。 资源的作用:它是发放给开发商…

Windows7打开配置需求的航空特殊效

Windows7打开配置需求的航空特殊效

透明,配置,需求,特殊效果,航空,点评:Windows 7 Aero透明效果的特殊效果,那么应配置Windows7打开透明效果以下是观看的具体方法 所谓的Windows 7 Aero透明效果是特殊效果,这是一个新的用户界面的显示效果,包括透明玻璃效果,Windows Flip和任务栏…

MySQL查询语句通过限制限制查询的

MySQL查询语句通过限制限制查询的

查询语句,查询,行数,电脑软件,MySQL,MySQL查询语句,它按限制限制查询的行数。 例如: 选择的名字从usertb年龄> 20限0, 1; / /限制从第一个节目开始,1 选择的名字从usertb年龄> 20限1; / /效果同上 选择的名字从usertb年龄> 20限4, 1; / /显…

是ausvc.exe过程安全ausvc过程信息

是ausvc.exe过程安全ausvc过程信息

过程,信息查询,电脑软件,ausvc,exe,评论:ausvc.exe是一个后门。autoupder病毒相关的过程。这个过程会让你的系统容易受到攻击 进程文件:ausvc或ausvc.exe 进程名称:autoupder病毒后门。 过程类别:安全风险的过程 英文描述: ausvc.exe是过程添…

如何Win7图形硬件加快速度提高的速

如何Win7图形硬件加快速度提高的速

图形,硬件,速度,玩游戏,看电影,点评:如果显卡支持硬件加速,看电影或玩游戏的速度和效率会有很大提高。很多朋友不知道如何加快win7显卡加速。下面是一个介绍你的好方法,你需要的朋友可以知道。 当我们看电影或玩游戏,如果显卡支持硬件加速,速度…

默认带宽限制解除方法在windows7系

默认带宽限制解除方法在windows7系

方法,带宽,系统,默认,电脑软件,评论:带宽就像高速公路上单位时间内在线公路上传输的数据量。常用的单位是bps(位每秒)。下面是介绍如何在windows7系统释放带宽的限制 对带宽概念的隐喻是高速公路的一个比喻,在单位时间内在公路上传输的数据量…

MySQL如何避免全表扫描

MySQL如何避免全表扫描

扫描,电脑软件,MySQL,在以下条件下,MySQL将执行全表扫描: 1 >数据表太小,做完整的表扫描比查找索引键要快得多,通常是在表的总记录小于10和记录长度短的情况下完成的。 2 >没有适合于子句或WHERE子句的索引字段。 3 >让索引字段和常量值比较,MyS…

是什么过程searchnavversion.exe-s

是什么过程searchnavversion.exe-s

作用,过程,电脑软件,exe,searchnavversion,点评:searchnavversion.exe是searchnav公司的广告程序。这个进程监视你的浏览行为,通过它去分析它的服务器进程也会弹出广告。 进程文件:searchnavversion或searchnavversion.exe 进程名称:searchnav…

什么是什么的过程agfaclnkagfaclnk

什么是什么的过程agfaclnkagfaclnk

作用,过程,电脑软件,exe,agfaclnkagfaclnk,注:agfaclnk.exe是爱克发爱克发数码相机相关的过程 进程文件:agfaclnk或agfaclnk.exe 进程名称:agfaclnk 过程类别:安全风险的过程 英文描述: agfaclnk.exe是爱克发数码相机的一个重要的过程。它是数…