Mysql查询选择需要很多时间

时间:2018-06-18 23:26:31

标签: php mysql sql laravel

我在Laravel中有一个站点执行以下SQL查询,并将它们合并为1.8秒。执行时间取自分析器工具栏

675.81ms    
SELECT definitions.*, terms.term, GROUP_CONCAT(DISTINCT(tags.name) SEPARATOR ",") AS tags FROM definitions INNER JOIN terms ON terms.id = definitions.term_id LEFT JOIN definition_tag ON definitions.id = definition_tag.definition_id LEFT JOIN tags ON tags.id = definition_tag.tag_id WHERE approved = 1 GROUP BY definitions.id ORDER BY id ASC LIMIT 2
0.21ms  
SELECT * FROM `settings` WHERE `name` = 'no_homepage_random' LIMIT 1
636.11ms    
SELECT definitions.*, terms.term, GROUP_CONCAT(DISTINCT(tags.name) SEPARATOR ",") AS tags FROM definitions INNER JOIN terms ON terms.id = definitions.term_id LEFT JOIN definition_tag ON definitions.id = definition_tag.definition_id LEFT JOIN tags ON tags.id = definition_tag.tag_id WHERE approved = 1 GROUP BY definitions.id ORDER BY RAND() LIMIT 1
628.68ms    
SELECT definitions.*, terms.term, GROUP_CONCAT(DISTINCT(tags.name) SEPARATOR ",") AS tags FROM definitions INNER JOIN terms ON terms.id = definitions.term_id LEFT JOIN definition_tag ON definitions.id = definition_tag.definition_id LEFT JOIN tags ON tags.id = definition_tag.tag_id WHERE approved = 1 GROUP BY definitions.id ORDER BY id DESC LIMIT 3

我想加速一般的SQL查询,也有点混淆为什么它只需要在phpmyadmin中运行相同查询的0.0049 seg。网站位于共享主机中。 我该怎么做才能改善?

2 个答案:

答案 0 :(得分:0)

可能是你的请求需要花费大量时间的内部和左连接命令:在其中一个表中:定义,术语,definition_tag和标签在字段中存在冗余并且使用内部和左部连接将使你的请求需要很长时间。

答案 1 :(得分:0)

- 如果您的数据库没有编入索引,随着您的数据库变得越来越大,查询往往会变慢。

- 还要看看你是如何查询的。在查询完成之前,确保没有那么多循环或操作。