首页 > 解决方案 > Mysql查询选择需要很多时间

问题描述

我在 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 段。网站位于共享主机中。我能做些什么来改进?

标签: phpmysqlsqllaravel

解决方案


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

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


推荐阅读