【发布时间】:2019-08-22 11:12:02
【问题描述】:
我正在运行一项工作,运行时间太长。
我已经创建了一个作业来根据多个表的值进行更新
UPDATE applicant_scores
SET applicant_scores.Age=2.5
where applicant_scores.Applicant_id in
(select applicantinfo.subebno from applicantinfo
WHERE SUBSTR(applicantinfo.DOB,7,4) ='1985')
这应该会更新大约 17000 行的列,但它需要的时间太长。
【问题讨论】:
-
你的 dbms 是什么?
-
我猜
SUBSTR(applicantinfo.DOB,7,4) ='1985'是问题所在。该列是如何索引的? -
在
WHERE IN子句中创建一个包含子查询结果的临时表,并将其编入索引。 -
你怎么知道子查询是耗时的?
-
在你的子查询中使用 SUBSTR 可能是杀死它的原因。看起来您正在以字符串格式存储日期;考虑将申请人信息.DOB 列转换为日期格式(最佳实践)并使用 Year 函数(在该列上创建索引)
标签: sql query-optimization sql-optimization