我是一个有用的助手,可以为您进行文本翻译。下面是您需要翻译的内容:
这样做可以得到相同的结果,但查询只需要1.5秒钟完成...
我从网上阅读的内容中了解到,使用JOIN应该比使用循环更好,但实际结果却与此相反...
我尝试过改变表的顺序(即大表连接小表),但这只会使情况变得更糟(高达1分钟)。
你能帮我理解这里发生了什么吗?
注:由于AspenTech的SQLPlus不允许执行计划,所以我无法获得执行计划。
非常感谢你的帮助。
我想解释一个困扰我的性能问题...
我有两个表,A和B。
表A定义了对象:
+----+--------------+
+ ID + other_things +
+----+--------------+
+ 1 + ~~~~~~~~~~~~ +
+ 2 + ~~~~~~~~~~~~ +
+ 3 + ~~~~~~~~~~~~ +
+----+--------------+
这个表格中有575行。
表B定义了这些对象的一些属性。
+----+-------------+-------------+
+ ID + prop_type + prop_value +
+----+-------------+-------------+
+ 1 + prop1 + foo +
+----+-------------+-------------+
+ 1 + prop2 + toto +
+----+-------------+-------------+
+ 3 + prop2 + lorem +
+----+-------------+-------------+
这个表格中有20254行。
目标是获取表A中所有项目的“prop2”值。
这里的一些用户已经很好地帮我设置了“好”的解决方案(参见问题41331902):
SELECT A.ID, B.prop_value
FROM A LEFT JOIN
B
ON A.ID = B.ID AND B.prop_type = 'prop2';
这个查询大约需要20秒的时间来执行。
然而,目前使用的是另一种版本,我一开始试图改进它:
FOR (
SELECT ID as id_a FROM A
)
DO
prop = (select prop_value from B where prop_type = 'prop2' and id = id_a);
write id_a || ' ' || prop;
END
这样做可以得到相同的结果,但查询只需要1.5秒钟完成...
我从网上阅读的内容中了解到,使用JOIN应该比使用循环更好,但实际结果却与此相反...
我尝试过改变表的顺序(即大表连接小表),但这只会使情况变得更糟(高达1分钟)。
你能帮我理解这里发生了什么吗?
注:由于AspenTech的SQLPlus不允许执行计划,所以我无法获得执行计划。
非常感谢你的帮助。