![]() |
1
3
你说运行查询大约需要4分钟。EXPLAIN PLAN输出显示估计为18秒。因此,在这种情况下,优化器可能与它的某些估计值相差甚远。(它仍然可以选择最好的方案,但可能不会。)
在这种情况下,第一步是获取实际的执行计划和统计数据。使用提示运行查询
如果没有这些信息,我的建议是尝试对查询进行以下重写。我相信它是等价的,因为ID似乎是table b的主键。
|
![]() |
2
1
|
![]() |
3
0
在stringField和dateField列上创建索引。SQL引擎自动使用它们。 |
![]() |
4
0
请发送此表的统计信息和DDL。 |
![]() |
5
0
如果您有足够的内存,可以提示查询使用哈希联接。请附上解释计划好吗 |
![]() |
6
0
如果表A是较小的表,那么表A有多少条记录?您可以在该表上进行选择,然后循环检索表B记录的结果,因为选择和排序都在表A上。 一个很好的实验是删除连接并测试其速度,如果允许的话,还可以将rownum<201作为and子句放在主查询上。很可能此时查询正在将所有行返回到外部查询,然后它正在被修剪? |
![]() |
8
0
您可以在tableA上创建一个函数索引。它将根据条件TableA.stringField(如“vr2_input”| |“%”)返回1或0。该索引将使查询运行得更快。函数的逻辑是
使用实际的列名而不是“*”可能会有帮助。至少应该删除公共列名。 |
![]() |
vytaute · 返回表类型时Oracle函数中的类型错误 2 年前 |
![]() |
BetaRide · Oracle架构用户无法在过程中创建表 6 年前 |
|
F.donoso · 嵌套的隐式游标未在数据中清除 6 年前 |
![]() |
ADH · 如何在网格中调用过程和输出结果 6 年前 |