在 Java 中通过 JDBC 查询速度慢,但在其他系统(TOAD)中则不然

2024-03-29

您好,我有一个对 Oracle 系统的查询,其中涉及一个视图,该视图通过将 TO_NUMBER() 应用于表主键来连接其他表。

如果我使用 TOAD 进行查询,查询速度非常快(800 个寄存器 1 秒)。如果我通过 JDBC 使用字符串文字(不是参数化查询)在 java 程序中执行相同的查询,时间也很好。

但是,如果我通过PreparedStatement 使用参数化查询,则查询需要 1 分钟才能获取相同的寄存器。我知道使用常量值会比使用参数产生不同的执行计划...但是如果我删除视图连接中的 TO_NUMBER 函数,参数化查询也很快。

  • 参数 / TO_NUMBER() 联合是否阻止使用连接表的 PK 索引?
  • 有没有解决方法来解决这个问题(我需要查询上的参数以及 TO_NUMBER 函数)?

P.D.抱歉我的英语不好


如果没有其他信息,我们只能假设索引未与应用于该列的 to_number() 函数一起使用。如图所示这个问题 https://stackoverflow.com/questions/1158188/index-not-used-due-to-type-conversion,类型转换可以阻止优化器使用索引。

一般来说:

  • 当您向列添加函数时(即:to_number(id))优化器将无法使用该列上的常规索引,
  • 如果可能,您应该使用原始列。例如:而不是WHERE trunc(col) = DATE '2009-08-27'你应该使用:WHERE col >= DATE '2009-08-27' AND col < DATE '2009-08-28'
  • 如果您确实必须将函数应用于列,您可以使用基于函数的索引 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_5010.htm#i2078649
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中通过 JDBC 查询速度慢,但在其他系统(TOAD)中则不然 的相关文章

随机推荐

  • Web.Debug.config 和 Web.Release.Config 文件的用途是什么?

    我刚刚升级到 Visual Studio 2010 和 MVC 2 0 我注意到 Web config 附加了两个附加文件 这些文件是否用于指定调试和发布特定设置 以便您不会弄乱主 Web config 如果我在调试和发布 Web conf
  • JSP gzip 输出流

    我知道我可以使用类似的东西来压缩输出流 OutputStream outA response getOutputStream outWriter new PrintWriter new GZIPOutputStream outA false
  • 如何使用Spring Data Jpa实现批量更新?

    如何使用Spring Data Jpa实现批量更新 我有一个商品实体 对于不同的用户级别 有不同的价格 例如 goodsId level price 1 1 10 1 2 9 1 3 8 当更新商品时我想批量更新这些价格 如下所示 Quer
  • 基于 webkit 的浏览器的 CSS 规则

    我有下一个 CSS 代码 mgheader letters display inline block margin left 55px margin top 45px position absolute mgheader letters d
  • 运行 Web 角色(Web 应用程序)的 Azure 云服务内存问题(Gen2)

    我有一个关于运行 MVC 应用程序的 Web 角色的高内存使用率的问题 使用简单注入器作为 DI 实体框架 6 用于 DAL 应用程序作为 Web 角色在 Azure 云服务上运行 具有 2 个标准 A2 实例 2 个核心 3 5 GB R
  • 将 WMI 调用转换为 CIM 调用

    我正在编写的代码应该启动当前可用于使用 CIM 的服务器的任何补丁 由于我的网络需要 DCOM 协议 我必须使用 CIM 我使用 以便于查看 以下 wmi 代码有效 ComputerName Foo System Management Ma
  • 如何使用Windows设备避免DLL劫持

    我开发了一个 Win32 应用程序 它调用使用 Windows 单元的 Win API 我相信这会调用Windows的系统库 例如kernel32 dll versions dll等 但安全审查员表示存在与预加载DLL劫持相关的安全问题 我
  • 来自一维像素阵列的 NSImage?

    我的程序中有一个大型一维动态数组 它表示磁盘上的 FITS 图像 即它保存图像的所有像素值 数组的类型是double 目前 我只关心单色图像 由于 Cocoa 不直接支持 FITS 格式 因此我使用 CFITSIO 库读取图像 这是可行的
  • 将 ISO 8601 转换为 NSDate

    我有一个来自服务器的时间戳 如下所示 2013 04 18T08 49 58 157 0000 我尝试删除冒号 我尝试了所有这些 将 ISO 8601 时间戳转换为 NSDate 如何处理 UTC 时间偏移 https stackoverf
  • 使用纯 CSS 定位第一个可见元素

    我想知道是否可以将以下内容转换为纯 CSS child visible first css border top 1px solid cccccc border bottom 1px solid cccccc 我似乎无法找到解决方案 作为抽
  • 替换字符串 php 中的最后一个斜杠

    我很难绕过正则表达式 我正在尝试删除字符串中的最后一个正斜杠 public url https api mongohq com 我的目的是删除最后一个正斜杠并将其替换为其他内容 我想我可以用preg replace但我找不到正确的模式来做到
  • 如何获取git中索引的树哈希?

    使用 git 如何获取分阶段更改的树哈希 也就是说 如果我提交了更改 提交的树哈希 不是提交哈希 将是什么 最简单的方法是提交树 git commit tree 解释 您不必进行完整的提交 当然这也是可行的 你只需要snapshot提交将会
  • 何时使用 EventListenerList 而不是一般的侦听器集合

    当我学习如何在 Java 中触发事件时 我开始熟悉 EventListenerList 当我创建自己的侦听器时 我编写侦听器 使其扩展 EventListener 将它们存储在 EventListenerList 中 并且我的 fire 方
  • T4 模板和 Visual Studio 项模板

    是否可以创建从 T4 模板生成的 Visual Studio 项模板 我的 google fu 似乎不够强大 无法给出答案 是的 你需要使用GAX http msdn microsoft com en us teamsystem aa718
  • Flutter 容器:无法同时提供颜色和装饰

    我想在容器周围绘制边框并为背景着色 Widget bodyWidget return Container color Colors yellow decoration BoxDecoration border Border all colo
  • 计算 Javascript 的循环复杂度 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何工具可用于计算 Javascript 中的圈复杂度 我过去在处理服务器端代码时发现它是一个非常有用的指标 并且希望能够将它用于我
  • 包含脚本、延迟或在 DOMContentLoaded 事件上执行的最佳实践?

    所以 我知道脚本执行的一般顺序 根据this https javascript info script async defer defered 脚本在之前执行DOMContentLoaded事件被触发 但不会阻止页面和后续脚本的加载 除非它
  • Xcode 4.0.2 启动时崩溃

    Xcode 在启动时崩溃 我不知道为什么 我下载了 4 0 2 iOS SDK 4 3 并安装了它 然后我尝试打开它 但它在启动时崩溃了 这是与崩溃相关的控制台日志 enter cdyld Library not loaded System
  • Auth0 - Django 和石墨烯

    我目前正在使用 Graphql 和 Django Graphene JWT 我使用 django 作为后端 所有请求均通过如下所示的令牌进行身份验证 我有一个为 graphql 创建身份验证令牌的模式 目前如下所示 class Mutati
  • 在 Java 中通过 JDBC 查询速度慢,但在其他系统(TOAD)中则不然

    您好 我有一个对 Oracle 系统的查询 其中涉及一个视图 该视图通过将 TO NUMBER 应用于表主键来连接其他表 如果我使用 TOAD 进行查询 查询速度非常快 800 个寄存器 1 秒 如果我通过 JDBC 使用字符串文字 不是参