知识大全 Oracle数据库索引优化技术关联查询性能调优

Posted 索引

篇首语:人喜欢习惯,因为造它的就是自己。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库索引优化技术关联查询性能调优相关的知识,希望对你有一定的参考价值。

Oracle数据库索引优化技术关联查询性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  数据库性能优化是无止境的 无论哪种优化技术只是一种手段 但最重要的不是技术 而是思想 掌握了索引优化技术仅仅刚入门 只有融会贯通 举一反三才能成为高手

  本文引用一套实验室信息管理系统(LIS)使用的数据库 假设我们要查询 年 月做检验的患者记录 条件是大于 岁 姓周的患者 最终结果按检查日期进行倒序排列 要使用的表有三个

  ◆lis_report 报告主表 我们要用到的字段包括i_checkno(检查号) d_checkdate(检查日期) i_patientid(患者ID)

  ◆m_patient 患者信息表 我们要用到的字段包括i_patientid(患者ID) s_name(患者姓名) s_code(患者住院号) i_age(患者年龄) i_dept(患者所在病区)

  ◆lis_code_dept 病区信息表 我们要用到的字段包括i_id(病区ID 主键 与m_patient中的i_dept关联) s_name(病区名)

  最终我们构造的SQL如下

  

  select a i_checkno a d_checkdate b s_name b s_code b i_age c s_name from lis_report a inner join m_patient b on a i_patientid = b i_patientid inner join lis_code_dept c on b i_dept = c i_id where a d_checkdate > and a d_checkdate < and b i_age>= and b s_name like 周% order by a d_checkdate desc

  我们的SQL使用的这三张表除了创建主键时自动创建的索引外 均未创建其它索引 下图是无索引时的执行计划

  表m_patient和lis_report都使用了全表扫描 m_patient全表扫描的成本是 lis_report全表扫描的成本是 只有表lis_code_dept因关联时使用的是其主键 因此这里使用了主键索引 从而避免了全表扫描 它的成本是 我们知道提高查询性能的目标之一就是消灭掉全表扫描 因此我们应该给表m_patient和lis_report加上适当的索引 在SQL代码的where子句中 对m_patient表 我们引用了i_age和s_name字段 对lis_report表 我们引用了d_checkdate字段 通常给这些条件中引用的字段加上索引会提高查询速度 我们先给m_patient的i_gae字段加上索引 下面是对应的执行计划

  表m_patient的全表扫描消失了 取而代之的是索引唯一性扫描 成本从 一下子降低到 了 注意这里并未使用我们给i_age增加的索引 但却靠它触发了使用表主键对应的索引 但表lis_report仍然是全表扫描 由于where子句中引用了该表的d_checkdate字段 因此我们给该字段加上索引看看效果

  表lis_report的全表扫描消失了 取而代之的是索引范围降序扫描(INDEX RANGE SCAN DESCENDING) 成本也从 下降到 注意这里的索引范围降序扫描的来历 因为我的where子句中引用d_checkdate是介于 至 的一个范围 这时引用的这种字段上建立的索引通常都是执行范围扫描 因为这种条件返回的值往往不止一行 使用降序扫描的原因是order by子句使用了降序排序 如果我们将SQL代码中的 order by a d_checkdate desc 改为 order by a d_checkdate 则变为索引范围扫描(INDEX RANGE SCAN)

  至此我们全部消除了全表扫描 我们看到加上索引后 查询执行的成本开销也有所降低 因为数据库表中的记录数不大 因此效果不太明显 如果有上百万条记录则会更直观

cha138/Article/program/Oracle/201311/18362

相关参考

知识大全 通过Oracle动态性能视图采集查询调优数

通过Oracle动态性能视图采集查询调优数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于现

知识大全 sql server 2008亿万数据性能优化

  根据设计惯例查询的时候主子表通过关键词字段关联查询查询语句如下  selecttopawordaqueryurlairankatitleabaiduurlaitrafficaitrafficbib

知识大全 Java程序性能优化-数据库调优

Java程序性能优化-数据库调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   数据

知识大全 mysql性能的检查和调优方法

  我一直是使用mysql这个数据库软件它工作比较稳定效率也很高在遇到严重性能问题时一般都有这么几种可能  索引没有建好  sql写法过于复杂  配置错误  机器实在负荷不了  索引没有建好  如果看

知识大全 mysql性能的检查和调优方法[5]

   这时可以看到结果集还是条但是Extra中的filesort不见了这时mysql使用userid_clicks这个索引去查询这不但能快速查询到userid=admin

知识大全 Oracle数据查询时经常用到的关联

Oracle数据查询时经常用到的关联  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关联在Ora

知识大全 oracle数据库如何重建索引

  当索引的碎片过多时会影响执行查询的速度从而影响到我们的工作效率这时候采取的最有利的措施莫过于重建索引了本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程接下来我们就开始介绍这一过程  

知识大全 mysql性能的检查和调优方法[4]

   这时mysql用到了clicks索引进行查询但是结果集比userid还要大!看来还要再进行限制   mysql>descsele

知识大全 mysql性能的检查和调优方法[1]

   我一直是使用mysql这个数据库软件它工作比较稳定效率也很高在遇到严重性能问题时一般都有这么几种可能   索引没有建好 &n

知识大全 高级扫描提高数据库查询性能

  一高级扫描使用举例  通常情况下在数据查询的时候数据库会利用索引或者通过全表扫描来查找数据但是如果需要的数据在数据库中存储不连续或者需要查找的记录比较多时此时索引的效果就会大打折扣在这种情况下数据