首页 > 解决方案 > 更快的流程返回方式

问题描述

我想从数据库中返回最后给定的护照。在表 1 中只有一个护照信息。在表 2 中有属于每个人的所有护照信息。

我的比较代码工作非常缓慢,需要太多时间。所以,如果我的代码有任何更快的替代代码,请分享它,坦克之前。

  from table1 t
 where t.pass_date <
       (select max(tb_datebeg) from table2 where tb_inn = t.tin)

标签: sqloracleperformancequery-optimization

解决方案


我们可以将其与分析函数一起表述为连接:

WITH cte AS (
    SELECT t1.*, MAX(t2.tb_datebeg) OVER (PARTITION BY t2.tb_inn) max_tb_datebeg
    FROM table1 t1
    INNER JOIN table2 t2 ON t2.tb_inn = t1.tin
)

SELECT *
FROM cte
WHERE pass_date < max_tb_datebeg;

上述查询将受益于以下索引table2

CREATE INDEX idx2 ON table2 (tb_inn, tb_datebeg);

推荐阅读