我有两张桌子(一张有33k行,另一张有7k行)。我想比较两个表并删除两个id不匹配的行。但是当我发送查询时,它会冻结phpmyadmin。表格太大了吗?
SELECT * FROM likes LEFT OUTER JOIN uploads on likes.upload_id = uploads.upload_id WHERE uploads.upload_id IS NULL
我知道数据库意味着处理数百万个数据,所以我不确定错误在哪里。
祝你好运, 的Mathias
答案 0 :(得分: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查看查询的执行方式。
答案 1 :(得分:2)
表可能不是太大但是如果脚本需要很长时间才能完成,那么PhpMyAdmin的查询超时可能会成为一个问题。尝试和change the timeout或根本不使用PhpMyAdmin。看看您是否能够使用服务器(或其他工具)上的命令行进行查询。
另见:
答案 2 :(得分:0)
Freeze是否意味着它正在发挥作用但永远不会“完成”任务?
如果是这样,
我有一个类似的事情,发现它们是由于列上有多个索引,例如列有一个PRIMARY索引和一个以列命名的索引,所以检查你的索引
答案 3 :(得分:0)
我有时会运行大量导入"查询"这可能需要几个小时才能完成。 (我解开"部分导入 - >允许导入中断......"。)
phpMyAdmin将不会在我启动查询的浏览器中响应,即使我尝试重新加载页面,但如果我在另一台机器上使用(我假设)另一台机器上的浏览器phpMyAdmin响应正常。
在另一个浏览器上,我然后向monitor发出SQL命令SHOW FULL PROCESSLIST
,并在需要时终止该长时间运行的查询。