小编Rya*_*ard的帖子

意外的超长查询时间(使用嵌套 WHEN-IN 约 5 分钟)

我第一次遇到 MySQL 查询执行时间过长(约 5 分钟)的问题。

数据库中的数据是高度(而非任意)规范化的。它非常有效地组织和改组数据以用于不同目的的许多非常有用的方式显示,除了这个特定的查询正在向它投掷扳手。

我无法理解这样做的原因。但是,一些背景信息可能会对其他任意复杂的查询有所了解。


该公司将世界划分为许多团队(macroregions)。根据他们的专业知识,每个人都属于一两个团队。

  • 例如,有许多不同的团队。几个例子是SpanishSaharaIberiaPortugueseJungle团队。每个团队都与其他团队有相当大的重叠,但在某种意义上是独立的。

  • Arabic团队与Sahara团队密切合作,因为数据库告诉他们由于地理位置重叠,他们必须在某些任务上一起工作。在SpanishPortuguese球队也紧密合作,他们与工作都AmericasEurope队和Portuguese队还与Africa球队一样,该Arabic团队。

  • 每个团队都有一组给定的区域,这些区域也不是该特定团队独有的。例如,该Mediterranean地区属于大约 12 个团队,当那里发生事件时,他们都会一起工作。

  • 每个国家属于一个或多个地区。Turkey属于Central AsiaEurope甚至Mediterranean,以及其他一些。

鉴于所有这些,有必要向每个人展示他们团队中的其他人正在做什么,以及不在他们的团队中但具有重叠区域的人。

查询 1完美地完成了这一点,而且非常快,不到 0.09 秒。


                SELECT report_name 
                FROM reports 
                WHERE region IN (
                    SELECT distinct region 
                    FROM macroregions
                    WHERE macroregion IN (
                        SELECT distinct …
Run Code Online (Sandbox Code Playgroud)

mysql performance normalization join

5
推荐指数
1
解决办法
1345
查看次数

标签 统计

join ×1

mysql ×1

normalization ×1

performance ×1