如何在 mysql 查询下进行优化(我是优化新手)
Posted
技术标签:
【中文标题】如何在 mysql 查询下进行优化(我是优化新手)【英文标题】:how can I optimise below mysql query (I am new to optimisation) 【发布时间】:2015-09-13 06:22:59 【问题描述】:如何优化这个 mysql 查询?
下面也提到了执行计划。
Select
tlk.id, um.store_users_id
from
user_modules um
inner join
module_chapters mc on um.modules_id = mc.modules_id
and mc.comment_status = 1
and um.modules_id = 3697
and mc.chapters_id = 4083
inner join
context con on con.module_id = mc.modules_id
and con.chapter_id = mc.chapters_id
inner join
user_talks tlk on tlk.contextId = con.id
and tlk.context_scope = 1
left join
talk_associated_users tau on tau.talk_id = tlk.id
and tau.target_store_user_id = um.store_users_id
where
tau.target_store_user_id is null
[![上述查询的计划][1]][1]
【问题讨论】:
请正确格式化 提及您尝试过的内容。这看起来像是一个家庭作业问题。 我刚刚尝试使用“解释”来查看执行计划。解释到底在做什么?我的意思是我如何理解从解释中执行查询的顺序? 简单的阅读文档解释 你能告诉我执行计划是什么意思吗?这是否意味着执行 mysql 查询的顺序? 【参考方案1】:运行EXPLAIN SELECT ...
并提供结果。
and mc.comment_status = 1
and um.modules_id = 3697
and mc.chapters_id = 4083
这些闻起来像是属于WHERE
子句的东西,而不是JOIN...ON
。
在mc
上,这可能是最佳选择:
INDEX(chapters_id, comment_status)
在um
上,这可能是最佳选择:
INDEX(modules_id)
EXPLAIN
,尤其是在添加这些索引之后,可能会产生更好的索引。
【讨论】:
以上是关于如何在 mysql 查询下进行优化(我是优化新手)的主要内容,如果未能解决你的问题,请参考以下文章