gpt4 book ai didi

SQL语句出奇地慢

转载 作者:行者123 更新时间:2023-12-03 16:28:20 26 4
gpt4 key购买 nike

select TABLE1.FIELD1, 
TABLE1.FIELD2,
TABLE1.FIELD3,
TABLE1.FIELD4,
TABLE1.FIELD5,
TABLE2.FIELD6,
TABLE2.FIELD7
from TABLE1,
TABLE2
where TABLE1.FIELD8 = 'value'
and TABLE2.FIELD6 = TABLE1.FIELD6;

我正在从 2 个不同的表中搜索一些数据。(Oracle 数据库 - 两个表的 wherefields 索引)上面的查询需要 500 毫秒才能执行。当我分别搜索相同字段的表时他们每个都在不到 20 毫秒内完成。

我可以在 TABLE1 中搜索我需要的数据 (+FIELD6)然后使用 FIELD6 在 TABLE2 中搜索其余部分。

我的问题是。为什么我加入表格时速度这么慢。我做错了什么吗?

编辑:添加 oracle 的解释计划

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6318 | 586K| 620 |
| 1 | HASH JOIN | | 6318 | 586K| 620 |
| 2 | TABLE ACCESS BY INDEX ROWID| TABLE1 | 6318 | 450K| 2 |
| 3 | INDEX RANGE SCAN | INDEX_TABLE1_FIELD8 | 2527 | | 1 |
| 4 | TABLE ACCESS FULL | TABLE2 | 430K| 9242K| 508 |
----------------------------------------------------------------------------------------

Note: cpu costing is off, 'PLAN_TABLE' is old version

最佳答案

如果 TABLE1 中有 25 条记录满足 field8='value' 并且如果需要 20ms 来select ... from table2 where field6=??? 然后500 毫秒在预期时间范围内。

因此,说每个查询花费20ms是很有意义的,你还必须说明在TABLE1中有多少条记录满足field8条件,以及平均有多少条记录满足TABLE2.FIELD6中的条件。

但要消除所有猜测,您应该让 Oracle 解释查询并在此处显示(或张贴)解释的计划以供进一步分析。

编辑:由于条件之间似乎存在 1:1 的关系(并且查询随后返回 1 条记录),因此预计不会有 500 毫秒。在这种情况下,我真的会强调解释查询的必要性。如果您不熟悉它,您可以这样做:

explain plan for
select .... <your entire select statement goes here>
;

select * from table(dbms_xplan.display);

然后发布结果。这将使我们能够更好地帮助您。

关于SQL语句出奇地慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com