Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
oracle 索引不能使用深入解析_创想鸟

oracle 索引不能使用深入解析

在开发过程中经常会使用到oracle 索引,偶尔会发现无法使用,本文将以此问题进行深入分析,需要了解的朋友可以参考下

较典型的问题有:有时,表明明建有索引,但查询过程显然没有用到相关的索引,导致查询过程耗时漫长,占用资源巨大,问题到底出在哪儿呢?按照以下顺序查找,基本上能发现原因所在。

查找原因的步骤
首先,我们要确定数据库运行在何种优化模式下,相应的参数是:optimizer_mode。可在svrmgrl中运行“showparameteroptimizer_mode”来查看。ORACLEV7以来缺省的设置应是”choose”,即如果对已分析的表查询的话选择CBO,否则选择RBO。如果该参数设为“rule”,则不论表是否分析过,一
概选用RBO,除非在语句中用hint强制。

其次,检查被索引的列或组合索引的首列是否出现在PL/SQL语句的WHERE子句中,这是“执行计划”能
用到相关索引的必要条件。

第三,看采用了哪种类型的连接方式。ORACLE的共有SortMergeJoin(SMJ)、HashJoin(HJ)和NestedLoopJoin(NL)。在两张表连接,且内表的目标列上建有索引时,只有NestedLoop才能有效地利用到该索引。SMJ即使相关列上建有索引,最多只能因索引的存在,避免数据排序过程。HJ由于须做HASH运算,索引的存在对数据查询速度几乎没有影响。

第四,看连接顺序是否允许使用相关索引。假设表emp的deptno列上有索引,表dept的列deptno上无索引,WHERE语句有emp.deptno=dept.deptno条件。在做NL连接时,emp做为外表,先被访问,由于连接机制原因,外表的数据访问方式是全表扫描,emp.deptno上的索引显然是用不上,最多在其上
做索引全扫描或索引快速全扫描。

第五,是否用到系统数据字典表或视图。由于系统数据字典表都未被分析过,可能导致极差的“执行计划”。但是不要擅自对数据字典表做分析,否则可能导致死锁,或系统性能下降。

第六,是否存在潜在的数据类型转换。如将字符型数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致第六种现象的发生。

第七,是否为表和相关的索引搜集足够的统计数据。对数据经常有增、删、改的表最好定期对表和索引进行分析,可用SQL语句“analyzetablexxxxcomputestatisticsforallindexes;”。ORACLE掌握了充分反映实际的统计数据,才有可能做出正确的选择。

第八,索引列的选择性不高。我们假设典型情况,有表emp,共有一百万行数据,但其中的emp.deptno列,数据只有4种不同的值,如10、20、30、40。虽然emp数据行有很多,ORACLE缺省认定表中列的值是在所有数据行均匀分布的,也就是说每种deptno值各有25万数据行与之对应。假设SQL搜索条件DEPTNO=10,利用deptno列上的索引进行数据搜索效率,往往不比全表扫描的高,ORACLE理所当然对索引“视而不见”,认为该索引的选择性不高。但我们考虑另一种情况,如果一百万数据行实际不是在4种deptno值间平均分配,其中有99万行对应着值10,5000行对应值20,3000行对应值30,2000行对应值40。在这种数据分布图案中对除值为10外的其它deptno值搜索时,毫无疑问,如果索引能被应用,那么效率会高出很多。我们可以采用对该索引列进行单独分析,或用analyze语句对该列建立直方图,对该列搜集足够的统计数据,使ORACLE在搜索选择性较高的值能用上索引。

第九,索引列值是否可为空(NULL)。如果索引列值可以是空值,在SQL语句中那些需要返回NULL值的操作,将不会用到索引,如COUNT(*),而是用全表扫描。这是因为索引中存储值不能为全空。

第十一,看是否有用到并行查询(PQO)。并行查询将不会用到索引。如我们想要用到A表的IND_COL1索引的话,可采用以下方式:“SELECT/*+INDEX(AIND_COL1)*/*FROMAWHERECOL1=XXX;”注意,注释符必须跟在SELECT之后,且注释中的“+”要紧跟着注释起始符“/*”或“–”,否则hint就被认为是一般注释,对PL/SQL语句的执行不产生任何影响。一种是EXPLAINTABLE方式。用户必须首先在自己的模式(SCHEMA)下,建立PLAN_TABLE表,执行计划的每一步骤都将记录在该表中,建表SQL脚本为在${ORACLE_HOME}/rdbms/admin/下的utlxplan.sql
。

打开SQL*PLUS,输入“SETAUTOTRACEON”,然后运行待调试的SQL语句。在给出查询结果后,ORACLE将显示相应的“执行计划”,包括优化器类型、执行代价、连接方式、连接顺序、数据搜索路径以
及相应的连续读、物理读等资源代价。如果我们不能确定需要跟踪的具体SQL语句,比如某个应用使用一段时间后,响应速度忽然变慢。我们这
时可以利用ORACLE提供的另一个有力工具TKPROF,对应用的执行过程全程跟踪。

我们要先在系统视图V$SESSION中,可根据USERID或MACHINE,查出相应的SID和SERIAL#。以SYS或其他有执行DBMS_SYSTEM程序包的用户连接数据库,执行“EXECUTE
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);”。然后运行应用程序,这时在服务器端,数据库参数“USER_DUMP_DEST”指示的目录下,会生成ora__xxxx.trc文件,其中xxxx为被跟踪应用的操作系统进程号。

应用程序执行完成后,用命令tkprof对该文件进行分析。命令示例:“tkproftracefileoutputfileexplain=userid/password”。在操作系统ORACLE用户下,键入“tkprof”,会有详细的命令帮助。分析后的输出文件outputfile中,有每一条PL/SQL语句的“执行计划”、CPU占用、物理读次数、逻辑读次数、执行时长等重要信息。根据输出文件的信息,我们可以很快发现应用中哪条PL/SQL语句是问题的症结所在.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/474835.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
《文明7》VR版正式发售 更加有趣的临场感文明世界
上一篇 2025年11月8日 08:58:52
小米14搭载强大的本地AI大模型:AI写真照片逼真程度惊人!
下一篇 2025年11月8日 08:58:57

相关推荐

  • java如何实现简单的GUI界面程序 java图形界面开发的实用教程

    java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程

    使用swing是java实现gui最直接的方式,因其内置jdk、上手快、适合功能性界面开发,通过jframe、jpanel、jlabel、jbutton等组件可快速构建交互式窗口,结合布局管理器、事件监听和外观设置能提升界面专业性,而面对线程安全、复杂布局、性能优化等挑战时需采用swingutili…

    2026年10月1日 • 用户投稿
    900
  • 大数据技术领域,MySQL和Oracle的对比与选择建议。

    大数据技术领域,MySQL和Oracle的对比与选择建议。大数据技术领域,MySQL和Oracle的对比与选择建议。大数据技术领域,MySQL和Oracle的对比与选择建议。大数据技术领域,MySQL和Oracle的对比与选择建议。

    大数据技术领域,MySQL和Oracle的对比与选择建议 摘要:随着大数据时代的到来,数据库管理系统起着至关重要的作用。在大数据技术领域,MySQL和Oracle是两个常见的选择。本文将对这两种数据库管理系统的特点进行对比,并给出在不同场景下的选择建议。 关键词:大数据,数据库管理系统,MySQL,…

    2026年10月1日 • 用户投稿
    000
  • 大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术?

    大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术?大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术?大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术?大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术?

    大数据时代,MySQL与Oracle哪个更受欢迎?如何选择适合自己的数据库技术? 随着大数据时代的到来,数据库成为了企业和个人处理和管理海量数据的重要工具。在数据库市场中,MySQL和Oracle作为两个领先的品牌备受关注。那么在这两者之间,哪个更受欢迎呢?如何选择适合自己的数据库技术? MySQL…

    2026年10月1日 • 用户投稿
    200
  • 甲骨文与 Meta 洽谈价值 200 亿美元的云计算协议

    甲骨文与 Meta 洽谈价值 200 亿美元的云计算协议甲骨文与 Meta 洽谈价值 200 亿美元的云计算协议甲骨文与 Meta 洽谈价值 200 亿美元的云计算协议甲骨文与 Meta 洽谈价值 200 亿美元的云计算协议

    甲骨文(Oracle)正与Meta Platforms展开高层级磋商,拟签订一份价值约200亿美元的长期云计算合作协议。根据协议构想,甲骨文将为Meta提供强大的计算资源,用于支撑其人工智能模型的训练与部署,进一步丰富Meta现有的云基础设施布局。 这一潜在合作凸显了人工智能时代下科技巨头对算力资源…

    2026年9月30日 • 用户投稿
    100
  • Oracle SQL日期加法:避免隐式转换陷阱与正确实践

    Oracle SQL日期加法:避免隐式转换陷阱与正确实践Oracle SQL日期加法:避免隐式转换陷阱与正确实践Oracle SQL日期加法:避免隐式转换陷阱与正确实践Oracle SQL日期加法:避免隐式转换陷阱与正确实践

    在Oracle数据库中进行日期加法操作时,若遇到年份计算错误(如2082年变为1982年),通常是由于隐式日期转换和会话的NLS_DATE_FORMAT设置(特别是RR和RRRR格式模型)导致的。本文将深入探讨这一问题产生的原因,并通过示例代码演示其影响,最终提供使用直接日期算术和TRUNC函数进行…

    2026年9月30日 • 用户投稿
    000
  • java怎样使用JVM参数配置运行环境 java虚拟机调优的入门技巧

    java怎样使用JVM参数配置运行环境 java虚拟机调优的入门技巧java怎样使用JVM参数配置运行环境 java虚拟机调优的入门技巧java怎样使用JVM参数配置运行环境 java虚拟机调优的入门技巧java怎样使用JVM参数配置运行环境 java虚拟机调优的入门技巧

    配置JVM运行环境需通过命令行参数设置内存、GC策略等,如-Xms512m -Xmx2g -XX:+UseG1GC,以优化资源利用率、响应速度与稳定性,避免OOM,提升应用性能。 配置Java虚拟机(JVM)运行环境以及进行初步调优,核心在于通过命令行参数来指导JVM如何分配和管理资源,以及选择合适…

    2026年9月30日 • 用户投稿
    100
  • 甲骨文云基础设施总裁和行业总裁接任联席 CEO

    甲骨文云基础设施总裁和行业总裁接任联席 CEO甲骨文云基础设施总裁和行业总裁接任联席 CEO甲骨文云基础设施总裁和行业总裁接任联席 CEO甲骨文云基础设施总裁和行业总裁接任联席 CEO

    云服务巨头甲骨文(oracle)近日宣布高层重大人事调整,任命公司云基础设施总裁克莱·马古伊尔克(clay magouyrk)与行业总裁迈克·西西里亚(mike sicilia)为联合首席执行官。此前已担任11年ceo的萨弗拉·卡兹(safra catz)将转任董事会副主席。 Mike Sicili…

    2026年9月30日 • 用户投稿
    000
  • PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级

    PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级

    ? PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级 让中文开发者告别命名困扰,拥抱高效编程新时代! ? 版本亮点 PandaCoder 1.1.8 作为内测版本,带来了全新的Bug记录功能本地文件启用禁用功能,让开发者可以更灵活地管理错误信息存储方式。这个版本不仅延续了插件…

    2026年9月29日 • 用户投稿
    200
  • Oracle如何修改时间格式?

    Oracle如何修改时间格式?Oracle如何修改时间格式?Oracle如何修改时间格式?Oracle如何修改时间格式?

    Oracle数据库中时间格式的修改在实际的开发中非常常见,本文将介绍Oracle数据库中如何修改时间格式,并提供具体的代码示例。 在Oracle数据库中,时间数据类型主要有DATE和TIMESTAMP两种类型,其中DATE类型存储日期和时间,而TIMESTAMP类型可以存储更高精度的时间信息。在进行…

    2026年9月28日 • 用户投稿
    200
  • web服务组件基础入门笔记小结

    web服务组件基础入门笔记小结web服务组件基础入门笔记小结web服务组件基础入门笔记小结web服务组件基础入门笔记小结

    web开发语言包括php、asp.net、jsp等,涵盖了多种用于构建web应用的编程语言。 Web服务系统主要分为Windows和Linux两大类。Windows系统代表有Windows 2003和Windows 2008,常见漏洞包括“永恒之蓝”(MS17-010)和MS08-067(虽然过时但…

    2026年9月28日 • 用户投稿
    100
  • 深入理解RESTful API的无状态性与数据持久化实践

    深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践

    本教程深入探讨RESTful API的无状态性核心原则,阐明为何不应在服务器内存中维护跨API调用的数据状态。我们将详细介绍RESTful架构的无状态约束,分析在服务器端存储会话或资源状态的弊端,并推荐使用数据库等外部持久化机制来可靠地管理数据,确保API的可伸缩性、可靠性和一致性。 理解RESTf…

    2026年9月28日 • 用户投稿
    100
  • REST API设计原则:理解无状态性与持久化数据管理

    REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理

    在REST API设计中,跨不同API调用维护服务器端变量(如用户列表)的内存状态与REST的无状态原则相悖。RESTful服务应将每个请求视为独立的事务,不依赖服务器端会话状态。对于需要持久化的数据,应采用数据库、文件系统等外部存储机制,而非在内存中直接维护,以确保系统的可伸缩性、可靠性和一致性。…

    2026年9月28日 • 用户投稿
    200
  • linux jar包怎么运行

    linux jar包怎么运行linux jar包怎么运行linux jar包怎么运行linux jar包怎么运行

    在 Linux 上运行 JAR 包需遵循以下步骤:安装 Java 运行时环境打开终端并导航到 JAR 包所在目录使用 java -jar jar-file-name.jar 命令运行 JAR 包处理 JAR 包的依赖项(如使用类路径、清单文件或模块系统)解决常见问题(例如 Java 找不到、权限问题…

    2026年9月28日 • 用户投稿
    000
  • 乌鲁木齐银行定向采购 Oracle、IBM、Redhat

    2022年2月18日,乌鲁木齐银行发布《正版oracle软件采购项目》公开询价公告,控制价 283 万元。 采购内容:主要目标为以数量授权模式采购,采购Oracle数据库6C,Oracle weblogic 4C,Oracle集群2C,Oracle ADG 2C。 2022年3月1日发布成交公告,新…

    2026年9月28日
    000
  • Oracle服务类型及功能特点概述

    Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述

    Oracle是世界领先的企业级数据库管理系统厂商,其产品服务种类繁多,功能强大,广泛应用于各行各业。本文将就Oracle的服务类型及功能特点进行概述,并提供一些具体的代码示例,方便读者更好地理解。 一、Oracle服务类型及功能特点概述 Oracle数据库服务类型: Oracle数据库服务主要包括O…

    2026年9月27日 • 用户投稿
    100
  • 如何识别Oracle数据库中的表锁定情况

    如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况

    在Oracle数据库中,表锁定是一种常见的数据库操作情况,当一个会话正在操作某个表时,如果另一个会话也想对同一张表进行操作,就会发生表锁定。表锁定可能会导致数据库性能下降,甚至引发死锁等问题。因此,及时识别和解决表锁定情况对于保证数据库正常运行至关重要。 在Oracle数据库中,可以通过查询Orac…

    2026年9月27日 • 用户投稿
    000
  • Oracle 数据库表空间查询方法详解

    Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解

    Oracle 数据库表空间查询方法详解 在使用 Oracle 数据库时,了解数据库表空间是非常重要的。表空间是 Oracle 数据库中用来存储表和索引数据的逻辑结构,它相当于数据库中数据存储的物理组织单元。在进行数据库管理和性能优化时,经常需要查询和了解表空间的使用情况。本文将详细介绍 Oracle…

    2026年9月27日 • 用户投稿
    100
  • Oracle数据库操作指南:快速创建查询用户

    Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户

    Oracle数据库操作指南:快速创建查询用户 在Oracle数据库中,为了提高数据库管理的效率和安全性,通常会为不同的用户分配不同的权限和角色。为了在数据库中创建一个具有查询权限的用户,以下是一些具体的代码示例和步骤: 步骤一:登录到Oracle数据库首先,使用管理员权限的用户登录到Oracle数据…

    2026年9月27日 • 用户投稿
    200
  • Oracle数据库性能调优实战技巧

    Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧

    标题:Oracle数据库性能调优实战技巧 在当今信息时代,数据库已经成为企业数据存储和管理不可或缺的重要组成部分。而Oracle作为业界领先的关系数据库管理系统(RDBMS),在企业中应用广泛。然而,随着数据量的不断增加,数据库性能的优化变得尤为重要。本文将介绍一些Oracle数据库性能调优的实战技…

    2026年9月27日 • 用户投稿
    100
  • Oracle函数的定义和用途深度解析

    Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析

    Oracle函数是数据库中一种非常重要的对象,它可以接收输入参数并返回一个值。在Oracle中,函数通常用于封装一些公共的逻辑或计算操作,以便在不同的地方重复使用。本文将深度解析Oracle函数的定义和用途,并提供具体的代码示例。 1. Oracle函数的定义 在Oracle数据库中,函数是一种存储…

    2026年9月27日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信