php - 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 段。网站位于共享主机中。我能做些什么来改进?
解决方案
- 如果您的数据库没有被索引,随着您的数据库变得越来越大,查询往往会变慢。
- 还要看看你是如何查询的。确保在查询完成之前没有太多循环或操作。
推荐阅读
- flutter - 如何在 SharedPreferences 中存储对象?
- flutter - 在谷歌地图颤振中更改纬度以获取圆形属性
- vue.js - 如何在 v-for 循环中填充嵌套的不同内容
- tsql - 这个 TSQL FROM 语句如何与花括号和逗号一起使用?
- r - 通过 R 中的符号链接读取数据
- python - 如何使用另一个嵌套字典中的值更新嵌套字典中的值
- c# - ActionResult 未正确获取参数
- arrays - 无法获取公式以在列末尾输入空白单元格
- netty - 如何在 Netty 4 中修复导致 IllegalArgumentException 的 AttributeKey
- javascript - 我正在尝试构建一个redis nodeJS缓存系统