【问题标题】:Phpmyadmin freezes on query, db too big?Phpmyadmin 冻结查询,数据库太大?
【发布时间】:2012-04-25 14:48:21
【问题描述】:

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

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

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

最好的问候, 马蒂亚斯

【问题讨论】:

  • “冻结”是什么意思?
  • 当 phpmyadmin 冻结时,脚本正在执行。你确定你有索引吗? 33k 行不算什么,应该不是问题。
  • 光标看起来好像在工作,但没有任何反应。很确定我的索引到位了,是的

标签: php mysql phpmyadmin


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    另见:

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          2- 启用外键检查

          【讨论】:

            猜你喜欢
            • 2016-07-24
            • 2020-08-06
            • 1970-01-01
            • 2015-10-10
            • 2021-02-15
            • 2016-04-26
            • 2015-06-17
            • 1970-01-01
            • 2017-04-07
            相关资源
            最近更新 更多