【发布时间】:2016-02-29 23:13:46
【问题描述】:
我正在尝试使用EXPLAIN 仔细查看我的查询并查看它们的运行情况,到目前为止,在EXPLAIN 中创建的最大id 是7,但它是冗长的查询,有很多事情要做。我刚刚使用类似于下面的结构进行了另一个查询,EXPLAIN 给了我一个最大为 13 的id。根据我对EXPLAIN 的了解,这通常意味着查询效率较低/运行时间越长,id 越高@ 987654327@ 给出,但这是相对规则还是存在某种界限?例如,最大 id 为 2 的查询被视为非常有效,而最大 id 为 13 的查询被视为非常低效,还是只有 2 比 13 更有效?当然还有与效率无关的ID号的第三个选项。
ID 13 查询:
select if(cond1, subquery, if(cond2, subquery(subsubquery),
subquery(subsubquery))) as colA, if(cond1, subquery(subsubquery), if(cond2,
subquery(subsubquery), subquery(subsubquery))) as colB from TableA join
TableB on X group by y order by z desc
【问题讨论】:
-
我怀疑这太宽泛而无法简洁地回答 - 但这个问题看起来很可怕!!!!
-
我更多的是寻找一个普遍的答案,Uueerdo 已经足够做,只是为了引导我的思考。哦,我非常清楚这看起来有多糟糕,我肯定会重新审视它,希望至少减少子查询的数量,如果不是 if 语句也是如此
-
那些类型的查询可能是架构设计不佳的症状,如果顶层没有聚合函数,那么(抛开性能优势不谈),应该没有按子句分组。
-
这是为了工作,我对数据库结构没有太多控制权,如果我这样做,查询可能会被压缩成一个带有一些 sum 和 count 函数的查询。