【发布时间】:2017-10-12 04:49:10
【问题描述】:
一切都在数据库所在的同一台机器上运行。这些查询以不同的方式做同样的事情。我使用 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命令行中却没有?
【问题讨论】:
-
你确定它们在同一个数据库上运行吗?有大量的结果吗?管理工具可能正在应用
LIMIT子句。 -
是的,我确定它们在同一个数据库上运行
-
正如@tadman 建议的那样,我很确定 PHPMyAdmin 通过将
LIMIT应用于您的查询来限制从数据库返回的记录数以提高性能。如果默认一次只显示 25 条(限制为 500 条),则不会返回 1000 万条记录。 -
@tadman 将有关限制条款的内容放在答案中,我会接受它,并在对该答案的评论中提供更多信息。
标签: mysql sql performance phpmyadmin mariadb