首页 > 解决方案 > Oracle 中子查询和文字表达式的 SQL 性能

问题描述

我在以下场景中遇到了一些性能问题,并且想从性能的角度询问可能是什么问题,因为我认为那些查询应该运行 cca。同时。

想象以下 2 个查询,实际上查询要长得多,但为简单起见,我减少了它们

从 x = 2010 的表中选择 *;

select * from table where x = (select year from yearTable where ID=1234);

X 列上有一个索引,子查询给出了 2010 年的确切年份,但是与第一个带有文字的查询相比,这个查询永远运行(几秒)

从技术角度来看,它们之间应该没有太大区别。当然必须评估子查询,但这以毫秒为单位,因为在 ID 上也有索引。

我发现在这个问题上,文字 vs 子查询,与数据库中的严重 SQL 语句作斗争。

可能是什么问题呢?

谢谢

标签: sqloracleperformanceoptimizationoracle19c

解决方案


对于第二个查询:

SELECT *
FROM table
WHERE x = (SELECT year FROM yearTable WHERE ID = 1234);

您实际上想要索引子查询中涉及的表以进行快速查找:

CREATE INDEX idx1 ON yearTable (ID, year);

假设 Oracle 会选择扫描该表,那么在外部查询中为表添加索引x可能不会有太大作用。


推荐阅读