gpt4 book ai didi

sql - INNER JOIN 性能与 '<' 或 '>' 条件

转载 作者:行者123 更新时间:2023-12-04 15:19:28 25 4
gpt4 key购买 nike

我有两个表,列 SessionOrder .此列是整数数据类型并具有以下索引:CREATE INDEX OSIDX_<internal name> ON <Entity> .

我正在执行以下查询:

SELECT i_0.rn, i_1.rn 
FROM (
SELECT "RawEvent"."SessionOrder" as rn
FROM "RawEvent" i_0
WHERE something = 12
)
INNER JOIN (
SELECT "RawEvent"."SessionOrder" as rn
FROM "RawEvent" i_1
WHERE something = 14
) ON i_0.rn > i_1.rn

这个查询的问题是 ON i_0.rn > i_1.rn这变得太慢和超时。
我把它换成了 ON i_0.rn = i_1.rn它非常快,但显然没有产生预期的结果。

有人知道提高此查询的性能避免超时的方法吗?
这个问题的另一个目标是了解为什么 ON i_0.rn > i_1.rn 性能不佳.

PS:不能增加超时时间

最佳答案

请先检查您是否真的使用 Oracle 数据库。您的 SQL 的语法建议使用其他 RDBMS 或某些预处理器。

要了解您对此类查询的期望,您可以使用以下虚拟示例。

生成样本数据

create table myTab as 
with mySeq as
(select rownum SessionOrder from dual connect by level <= 10000)
select 12 something, SessionOrder from mySeq union all
select 14 something, SessionOrder from mySeq
;

这会生成两个子源,每个子源都有 10.000 个序列,从 1 到 10.000。

测试查询
create table myRes as
select a.SessionOrder rn0, b.SessionOrder rn1
from myTab a join myTab b on a.SessionOrder > b.SessionOrder and
a.something = 12 and b.something = 14;

在不到 30 秒的时间内生成 49.995.000 行。

如果您希望在更短的时间内获得如此大的结果,则需要进行高级优化。在不了解您的数据和要求的情况下,不可能提供一般建议。

关于sql - INNER JOIN 性能与 '<' 或 '>' 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41269013/

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