我正在从事一项工作,而且花费的时间太长。
我创建了一个要基于多个表的值进行更新的作业
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行,但是花费的时间太长。
答案 0 :(得分:3)
我建议使用<android.support.design.widget.TextInputLayout
android:id="@+id/userIDTextInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/userIDTextInputEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email or Username" />
</android.support.design.widget.TextInputLayout>
和一个索引:
not exists
为了提高性能,您希望在UPDATE applicant_scores
SET applicant_scores.Age = 2.5
WHERE EXISTS (SELECT 1
FROM applicantinfo ai
WHERE appliacnt_scores.Applicant_id = ai.subebno AND
SUBSTR(ai.DOB, 7, 4) ='1985'
);
上建立索引。
注意:applicantinfo(subebno, DOB)
可能表示“出生日期”。它应作为DOB
存储在数据库中,并且您应该使用正确的日期函数,例如:
date
不要将日期存储为字符串。不要在日期上使用字符串函数。
答案 1 :(得分:0)
SET Age_Score=(SELECT Age_Score FROM age_scoretbl WHERE SUBSTR(applicantinfo.DOB,7,4)= age_scoretbl.Birth_Year);```
答案 2 :(得分:0)
您的问题是这个
WHERE SUBSTR(applicantinfo.DOB,7,4) ='1985'
数据库无法快速找到所有符合该条件的行。没有索引。它必须检查数据库中的每一行以找到与该表达式匹配的行。
您拥有的一种解决方案是,您可以在表中添加另一列,也可以将其命名为dob_year
,那么那只是该日期之外的年份。然后,您CREATE INDEX applicantinfo_dob_year ON applicantinfo(dob_year)
。然后将您的WHERE
子句更改为WHERE dob_year ='1985')
https://use-the-index-luke.com/是学习有关数据库索引以及如何正确使用它们以加快查询速度的绝佳站点。