sql - Oracle 中子查询和文字表达式的 SQL 性能
问题描述
我在以下场景中遇到了一些性能问题,并且想从性能的角度询问可能是什么问题,因为我认为那些查询应该运行 cca。同时。
想象以下 2 个查询,实际上查询要长得多,但为简单起见,我减少了它们
从 x = 2010 的表中选择 *;
select * from table where x = (select year from yearTable where ID=1234);
X 列上有一个索引,子查询给出了 2010 年的确切年份,但是与第一个带有文字的查询相比,这个查询永远运行(几秒)
从技术角度来看,它们之间应该没有太大区别。当然必须评估子查询,但这以毫秒为单位,因为在 ID 上也有索引。
我发现在这个问题上,文字 vs 子查询,与数据库中的严重 SQL 语句作斗争。
可能是什么问题呢?
谢谢
解决方案
对于第二个查询:
SELECT *
FROM table
WHERE x = (SELECT year FROM yearTable WHERE ID = 1234);
您实际上想要索引子查询中涉及的表以进行快速查找:
CREATE INDEX idx1 ON yearTable (ID, year);
假设 Oracle 会选择扫描该表,那么在外部查询中为表添加索引x
可能不会有太大作用。
推荐阅读
- c# - LINQ:在 5 分钟内按日期范围分组
- python - Python版本和Jupyter Notebook的问题
- eclipse - eclipse 团队资源管理器 git jar 文件未加载
- javascript - 如何使用单个 HTML 按钮以可见方式切换 React 小部件
- javascript - 使用 css 更改位置,避免使用 flexbox 和 javascript (append, insertAfter)
- python - 无法使用带有抽象静态方法的 cythonized 模块
- javascript - D3.js:如何平移两个轴,但只缩放一个?
- windows - 控制 Perl 认为的“系统外壳”
- spring-webflux - Spring webflux difference between block, flatmap and subscribe
- python - Django Admin changeform_view methosdont' permit open edit data