为什么phpmyadmin会比mysql命令行快得多?

时间:2017-05-12 19:13:36

标签: mysql sql performance phpmyadmin mariadb

所有内容都在数据库所在的同一台机器上运行。这些查询以不同的方式执行相同的操作。我正在使用mariadb作为数据库引擎。

查询1:

SELECT p.* 
FROM users as u INNER JOIN votes ON u.Id=votes.UserId INNER JOIN posts as p ON p.Id=votes.PostId 
WHERE (SELECT MIN(u2.reputation) 
       FROM users as u2 INNER JOIN votes ON u2.Id=votes.UserId INNER JOIN posts as p2 ON p2.Id=votes.PostId 
       WHERE p2.Id=p.Id) >= {}
ORDER BY p.Id;

在mysql命令行中占用大约2.9秒,在phpmyadmin中占用0.1秒

查询2:

SELECT P.*
FROM posts as P 
    JOIN votes AS V on P.Id=V.PostId
    JOIN users AS U on V.UserId=U.Id
WHERE U.Reputation >={}
    AND P.Id NOT IN 
    (SELECT DISTINCT (P2.Id)
    FROM posts P2, votes V2,users U2
    WHERE P2.Id=V2.PostId
        AND V2.UserId =U2.Id
        AND U2.reputation < {})
ORDER BY P.Id;

在mysql命令行中占用大约3.1秒,在phpmyadmin中占用0.9秒。

这些时间都取自运行查询后自动显示的时间。

为什么phpmyadmin会更快?为什么在phpmyadmin中速度的百分比差异如此之大,而在mysql命令行中却没有?

3 个答案:

答案 0 :(得分:5)

像phpMyAdmin这样的前端工具经常在LIMIT子句上使用,以便对结果进行分页,而不会在大型表上崩溃浏览器或应用程序。一个可能返回数百万条记录的查询,这样做需要花费很多时间,如果受到更多约束,它的运行速度会更快。

将有限查询与完整查询进行比较并不公平,检索时间会有很大差异。检查两个工具是否都在获取所有记录。

答案 1 :(得分:0)

根据您使用的存储引擎,很可能是从数据缓存而不是查询缓存加载数据。时差太大,如果清理缓存并再次运行查询,您会发现差异

答案 2 :(得分:-2)

尽管我正在将数据上传并插入到现有表中,只是对大约1800万条记录的常规简单插入语句,但我认为这很大程度上取决于您的设置和硬件。对phpmyadmin进行微调以使其在硬件上获得最佳性能,我花了一些时间才能远程完成该工作,因此决定在服务器中以简单的命令行上传。 Phpmyadmin,一次中断约500行,并且确实一次又一次地发送查询,因此连接不会超时。它按块进行下载和上传。尽管phpmyadmin花费了大约10分钟以上的时间来完成这项工作,但命令行是中间的。

无论读取和上传相同的SQL导入文件花了什么时间,phpmyadmin都比超时慢了好几倍,而且有超时问题。它与很多因素有关,例如内存和最大变量等php.ini设置,http服务器设置(apache设置与带有php7-fastcgi参数的nginx等等)甚至是php版本也很重要,因为phpmyadmin可以完美地与某些版本,有时无法与其他人一起使用。如果您要处理大量数据,最好从命令行使用直接转储。 phpmyadmin非常适合详细信息,少量导入和导出以及快速修复,但是浏览器位于中间,因此我想直接数据输入输出总是更好,更快。因此,要回答您的问题,涉及设置,硬件和您正在做的工作以及如何做。那是我的卑鄙建议。