我第一次遇到 MySQL 查询执行时间过长(约 5 分钟)的问题。
数据库中的数据是高度(而非任意)规范化的。它非常有效地组织和改组数据以用于不同目的的许多非常有用的方式显示,除了这个特定的查询正在向它投掷扳手。
我无法理解这样做的原因。但是,一些背景信息可能会对其他任意复杂的查询有所了解。
该公司将世界划分为许多团队(macroregions)。根据他们的专业知识,每个人都属于一两个团队。
例如,有许多不同的团队。几个例子是Spanish
、Sahara
、Iberia
、Portuguese
、Jungle
团队。每个团队都与其他团队有相当大的重叠,但在某种意义上是独立的。
该Arabic
团队与Sahara
团队密切合作,因为数据库告诉他们由于地理位置重叠,他们必须在某些任务上一起工作。在Spanish
和Portuguese
球队也紧密合作,他们与工作都Americas
与Europe
队和Portuguese
队还与Africa
球队一样,该Arabic
团队。
每个团队都有一组给定的区域,这些区域也不是该特定团队独有的。例如,该Mediterranean
地区属于大约 12 个团队,当那里发生事件时,他们都会一起工作。
每个国家属于一个或多个地区。Turkey
属于Central Asia
,Europe
甚至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)