sql - 更快的流程返回方式
问题描述
我想从数据库中返回最后给定的护照。在表 1 中只有一个护照信息。在表 2 中有属于每个人的所有护照信息。
我的比较代码工作非常缓慢,需要太多时间。所以,如果我的代码有任何更快的替代代码,请分享它,坦克之前。
from table1 t
where t.pass_date <
(select max(tb_datebeg) from table2 where tb_inn = t.tin)
解决方案
我们可以将其与分析函数一起表述为连接:
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);
推荐阅读
- python - 访问谷歌存储桶的问题
- java - 如何将 H2 控制台嵌入 WAR
- javascript - 将表单数据发送到 Firebase
- rest - 以更精确的方式理解 SOAP 与 REST
- php - PHP如何存储GET变量以供以后使用
- javascript - 字段无效时如何禁用Antd Form外的提交按钮?
- shopify - 更新购物车抽屉而不在 shopify 中重新加载页面
- django - 使用 formData 请求空数据 - Django Rest Framework
- flutter - 等待完成后如何关闭警报对话框
- swift - 在 Swift Dictionary 中调用嵌套超过 1 层的项目