我正在执行来自 SQLite Expert Personal 的查询在大小约为 6mb 的本地数据库上。我的机器在 Intel i5 CPU (3.1GHz) 上运行带有 4GB 内存的 Windows 7。我希望这会在几秒钟内完成,因为一切都是本地的,但由于某种原因,它在 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 毫秒:
6.
最佳答案
表达式 a.appid LIKE b.logonid
无法优化,即使在 appid
上使用不区分大小写的索引也是如此.
因此,数据库必须检查 userlist
中的每条记录。针对employeeinfo
中的每条记录,所以有 7K × 30K = 210M 比较。
您应该确保这些表中的字符串具有规范的大写,以便您可以使用普通的 =
比较。
或者,创建一个附加列来存储字符串的小写版本。
关于sql - 为什么本地 sqlite 数据库上的此查询需要 4 分钟才能执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555487/