PLSQL执⾏计划查看
⼀.如何查看PLSQL的执⾏计划
在SQl Window窗⼝输⼊sql语句,然后按键"F5",就会进⼊执⾏计划查看界⾯。
⼆.界⾯说明
⾸先我们看第⼆⾏有⼏个属性可以选“Tree”、“HTML”、“Text”、“XML”。这⼏个⾥⾯的核⼼数据是⼀样的,不同的只是对核⼼数据的展⽰⽅式,分别为Tree、HTML、Text、XML。这个可以根据个⼈习惯来进⾏选择。
再下⾯有⼏个列属性(每个⼈的列属性可能会不同,这个是可以在PLSQL中进⾏配置)
我们⾸先看第⼀列的Description:下⾯的内容分别是我们这条SQL的执⾏步骤,缩进量最多的步骤最先执⾏,如果缩进量相同,则按照从上往下的顺序执⾏。
Object owner:对象的所有者。
Object name:对象名称。
Cost:成本花费。这⾥可以详细地查看SQL执⾏的每⼀步的成本花费。
Time:执⾏时间。
三.如何优化SQL
1.查看SQL是全表扫描还是利⽤索引查询。
假设有⼀张表t_srhs_jks,⾥⾯有1000万条数据,我们在这张表中执⾏⼀条SQL:
我们可以看到根据条件dtnm=****查询数据,由于DTNM字段不是索引,因此⾸先执⾏了"TABLE ACCESS FULL",即全表搜索,然后再执⾏上⾯的"SELECT STATEMENT, GOAL = ALL ROWS"查询出所有数据⾏。
在这条SQL中的成本花费⼀共是14287(Cost=14287),执⾏时间是172(Time=172)。
然后我们对dtnm字段添加索引后再执⾏这条SQL:
相⽐第⼀次执⾏,这⾥的成本花费只有5385,执⾏时间只有65,减少了将近⼀倍。
然后我们再来查看⼀下Description下的执⾏步骤:
(1)INDEX RANGE SCAN:索引范围内查。
(2)TABLE ACCESS BY INDEX ROWID:根据索引到的ROWID来查需要的数据。
(3)SELECT STATEMENT,GOAL = ALL ROWS:根据到的数据,返回所有⾏。
关于索引的扫描类型:
1)index unique scan:索引唯⼀扫描。
  单列唯⼀索引:通过"="判断条件时候才会使⽤,⾄多返回⼀条数据。
  多列唯⼀索引:所有的列都通过"="判断条件时才会使⽤,且不能有任何⼀列的值被指定为null。
2)index range scan:索引范围扫描。
  单列唯⼀索引:通过">"、"<"、">="、"<="、"between"等判断条件时会被使⽤。
  多列唯⼀索引:全部或部分列(必须包含第⼀列,否则不会⾛这条索引)通过">"、"<"、">="、"<="、"between"等判断条件时会被使⽤。部分列也可以在通过"="判断条件时候被使⽤。
  普通索引:单列索引正常的条件判读都会使⽤范围扫描,多列的索引必须带有第⼀列索引的条件判断才会被使⽤范围扫描。
3)index skip scan:索引跳跃扫描。
plsql注册码激活
  只有当组合索引,且引导列(第⼀列)没有被使⽤的情况下,可能会使⽤索引跳跃扫描。⼀般发⽣在引导列的distinct值很少的情况下。oracle帮我们改写了sql语句,如select * from A where b=100,组合索引(a,b)中a的取值只有1和2时,sql会被改写为select * from A where a = 1 and b = 100 union all select * from A where a = 2 and b = 100。
4)index full scan:索引全扫描。
  这⼀个和索引快速扫描异曲同⼯。通常是在使⽤索引列进⾏count、sum等函数统计时候使⽤。
5)index fast full scan:索引快速扫描。
关于索引,有以下⼏种情况时候不会被使⽤(只针对数据字段查询,不包括count、sum等函数统计):
1)'%'被添加在参数前⾯。
2)带'not'的条件,包括'<>'、'!='。
3)执⾏函数(函数索引除外。如果定义的是函数索引,即使使⽤函数仍然是可能会⾛索引。)
4)格式不正确(下图的jksbh字段是vchar类型,令它与number类型⽐较,不会⾛索引。)
5)使⽤null判断
记录⼀下PLSQL12的⼀个注册码
PLSQL Developer 12 注册码
product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le
serial Number:226959
password: xs374ca

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。