oracle 诡异的查询语句

2023-09-18 11:31:20 +08:00
 crasa

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

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

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

最终程序执行上要考虑耗时功能优化翻页等等
crasa
2023-09-18 16:28:50 +08:00
@matepi 感谢老铁,不过程序调用也是有分页的,就是同一个分页查询在不同机器的执行效果相差太大。一个是开发机调用 sql (百来毫秒),一个是测试环境机器调用 sql (几十到几百秒)
matepi
2023-09-18 16:32:05 +08:00
@crasa 还是看下执行计划吧,有分页也会再被 fetchsize 最终再限制
matepi
2023-09-18 16:35:02 +08:00
哦,还想起来一个场景,对于一些数字形字符是否有隐式转换为数字,造成对数字可以用上索引之类的。可能在不同的接入客户端模式上也有不同。对应的 preparestatement 或者 orm 框架上,对应的既能数字、也能文字的字段类型,是否正确绑定,用上了索引。
crasa
2023-09-18 17:27:44 +08:00
@matepi 感谢老铁分析,我再研究下
QZFCANBA
259 天前
老哥找出问题了吗。。我这也有这个问题,datagrip 里 2 300 毫秒,mybatis 里 4 5 秒
crasa
226 天前
@QZFCANBA 后来自己好了,不知啥原因,哈哈,我也是用的 datagrip

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/974779

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX