如何在 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 查询下进行优化(我是优化新手)的主要内容,如果未能解决你的问题,请参考以下文章

总结MySQL大数据量下如何进行优化

mysql查询所用时间过长 如何优化?

如何使用数千个 WHERE 子句优化 SQL 查询

如何优化在c#react中执行查询的时间

mysql中怎样对大批量级的数据查询进行优化

数据库优化——慢查询MySQL定位优化流程