我有两个表,分别包含现有文件名和下载的文件名。现有文件表上有61k +条记录,下载文件表上有34k +条记录。我正在使用此查询来查找尚未下载的文件名! 选择*从files哪里filename ''和filename不在 (选择filename从downloads)当有很少的记录但现在不工作时,这工作正常,几天前,有50k和20k记录时,它变得很慢,就像在5/6分钟内得到结果一样,但是现在它显示此错误: 内部服务器错误500 子进程(php)退出信号为0时无响应文件名字段是表的文件名字段(varchar 255),并且两个字段都已索引。有什么帮助吗? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 首先,在files和downloads上添加索引。这将使搜索更快。这可能需要几分钟。ALTER TABLE files ADD INDEX (filename);ALTER TABLE downloads ADD INDEX (filename);然后,使用LEFT JOIN而不是子查询。SELECT f.*FROM files fLEFT JOIN downloads d ON d.filename = f.filenameWHERE d.filename IS NULL AND f.filename <> ''完成这些更改后,搜索应该花费不到一秒钟的时间。 (adsbygoogle = window.adsbygoogle || []).push({});