2

我有两张桌子(一张有 33k 行,另一张有 7k 行)。我想比较这两个表并删除两个 id 不匹配的行。但是当我发送查询时,它会冻结 phpmyadmin。桌子会不会太大?

SELECT * FROM likes LEFT OUTER JOIN uploads on likes.upload_id = uploads.upload_id WHERE uploads.upload_id IS NULL 

我知道数据库旨在处理数百万个数据,所以我不确定错误在哪里。

最好的问候, 马蒂亚斯

4

5 回答 5

3

我会做一个解释,这样你就可以看到 mysql 做了什么。这将很好地指示使用了多少行。

EXPLAIN SELECT * FROM likes LEFT OUTER JOIN uploads on likes.upload_id = uploads.upload_id WHERE uploads.upload_id IS NULL

您还可以使用另一个浏览器或另一个会话来使用 show processlist 来查看查询是如何执行的。

于 2012-04-13T08:24:32.680 回答
2

表可能不是太大,但如果脚本需要很长时间才能完成,PhpMyAdmin 的查询超时可能是一个问题。尝试更改超时或根本不使用 PhpMyAdmin。看看您是否能够使用服务器(或其他工具)上的命令行进行查询。

也可以看看:

于 2012-04-13T08:38:38.347 回答
0

冻结是否暗示它正在工作但从不更新/从不“完成”任务?

如果是这样,
我有过类似的事情,发现它们是由于一列上有多个索引,例如一列有一个 PRIMARY 索引和一个以该列命名的索引,所以检查你的索引

于 2014-12-19T10:33:59.110 回答
0

我有时会运行可能需要几个小时才能处理的大型导入“查询”。(我取消勾选“部分导入 -> 允许中断导入...”。)

phpMyAdmin 不会在我开始查询的浏览器中响应,即使我尝试重新加载页面,但是如果我使用(我假设)不同 IP 地址的另一台机器上的浏览器,phpMyAdmin 响应很好。

然后,在另一个浏览器上,我发出 SQL 命令SHOW FULL PROCESSLIST监视并在需要时终止那个长时间运行的查询。

于 2015-11-16T04:54:00.067 回答
0

您可以取消选中导入中的两个选项

1 - 如果脚本检测到它接近 PHP 超时限制,则允许中断导入。(这可能是导入大文件的好方法,但它可能会破坏事务。)

2-启用外键检查

于 2021-10-03T05:29:13.557 回答