我正在SQLite Expert Personal上对大小约为6mb的本地数据库执行查询。我的机器在Intel i5 CPU(3.1GHz)上运行Windows 7,内存为4GB。我希望这能在几秒钟内完成,因为一切都是本地的,但由于某种原因,它在277667毫秒(大约4.5分钟)内执行。关于为什么这对于相对较小的数据集需要这么长时间的任何想法?如果您需要更多信息,请告诉我
TABLE "userlist" contains about 7k records and 4 columns
TABLE "employeeinfo" contains about 30k records and 8 columns
查询:
CREATE TABLE join1 AS
SELECT a.appname AS APPNAME, a.appid AS APPID, a.perm AS PERMS, a.holdflag AS HOLDFLAG, b.FirstName AS USERFIRST, b.LastName AS USERLAST, b.DeptName AS USERDEPT,
b.TermDate AS USERTERMDATE, b.logonid AS USERHRLOGON, b.empnum AS USEREMPNUM, b.persontype AS USERPERSONTYPE, b.mgrlogonid AS MGRHRLOGON
FROM userlist AS a
LEFT JOIN
employeeinfo AS b
ON a.appid LIKE b.logonid;
更新 执行以下操作后,我的执行时间从4.5分钟缩短到110毫秒:
答案 0 :(得分:4)
您没有指定通配符,因此请勿在{{1}}条件下使用LIKE
- 将其更改为ON
,并确保=
已编入索引。< / p>
答案 1 :(得分:4)
表达式a.appid LIKE b.logonid
无法优化,即使appid
上的不区分大小写索引也无法优化。
因此,数据库必须针对userlist
中的每条记录检查employeeinfo
中的每条记录,因此有7K×30K = 210M的比较。
您应该确保这些表中的字符串具有规范大小写,以便您可以使用简单的=
比较。
或者,创建一个附加列,您可以在其中存储字符串的小写版本。