V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
crasa
V2EX  ›  程序员

oracle 诡异的查询语句

  •  
  •   crasa · 2023-09-18 11:31:20 +08:00 · 1203 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    老铁们有没有遇到过在终端执行 sql 语句非常快,几十几百毫秒级,但是通过程序调用执行非常慢回到几十秒甚至一两百秒

    11 条回复    2024-04-09 14:10:38 +08:00
    Momostudent
        1
    Momostudent  
       2023-09-18 12:27:43 +08:00
    遇到过 同样的问题,在 plsql 等工具下面直接 执行也是非常快,在程序中调用非常慢
    后来自己自己恢复了、、、、、、
    jmss
        2
    jmss  
       2023-09-18 13:03:41 +08:00
    还能这么离谱吗,是不是和程序调用的数据库驱动有关,能准确复现吗
    crasa
        3
    crasa  
    OP
       2023-09-18 13:30:47 +08:00
    @jmss 是的,每次都老样子
    crasa
        4
    crasa  
    OP
       2023-09-18 13:31:23 +08:00
    @Momostudent 啥也没管就好了?
    matepi
        5
    matepi  
       2023-09-18 16:10:32 +08:00 via iPhone
    可能是终端和程序调用时上 fetch 条数的默认设定不同导致,终端默认 fetch first 50 或窗口大小可显示条数,导致执行计划和实际开销都优于,程序默认调用全量返回数据的执行计划和实际开销

    可以尝试通过程序侧调用执行计划获取一下,比对一下终端都执行计划

    最终程序执行上要考虑耗时功能优化翻页等等
    crasa
        6
    crasa  
    OP
       2023-09-18 16:28:50 +08:00
    @matepi 感谢老铁,不过程序调用也是有分页的,就是同一个分页查询在不同机器的执行效果相差太大。一个是开发机调用 sql (百来毫秒),一个是测试环境机器调用 sql (几十到几百秒)
    matepi
        7
    matepi  
       2023-09-18 16:32:05 +08:00
    @crasa 还是看下执行计划吧,有分页也会再被 fetchsize 最终再限制
    matepi
        8
    matepi  
       2023-09-18 16:35:02 +08:00
    哦,还想起来一个场景,对于一些数字形字符是否有隐式转换为数字,造成对数字可以用上索引之类的。可能在不同的接入客户端模式上也有不同。对应的 preparestatement 或者 orm 框架上,对应的既能数字、也能文字的字段类型,是否正确绑定,用上了索引。
    crasa
        9
    crasa  
    OP
       2023-09-18 17:27:44 +08:00
    @matepi 感谢老铁分析,我再研究下
    QZFCANBA
        10
    QZFCANBA  
       259 天前
    老哥找出问题了吗。。我这也有这个问题,datagrip 里 2 300 毫秒,mybatis 里 4 5 秒
    crasa
        11
    crasa  
    OP
       226 天前
    @QZFCANBA 后来自己好了,不知啥原因,哈哈,我也是用的 datagrip
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:04 · PVG 23:04 · LAX 07:04 · JFK 10:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.