gpt4 book ai didi

mysql - (为什么?)Greatest+Coalesce 方式比使用 or 的单个选择更快

转载 作者:行者123 更新时间:2023-11-29 06:26:07 25 4
gpt4 key购买 nike

我目前很难理解为什么会这样:

greatest(
coalesce((select f.expReplDate from da_sakunden_fzg f where (f.ServerNr = k.ServerNr) and (k.proId = f.proId) order by f.expReplDate limit 1),0),
coalesce((select f.expReplDate from da_sakunden_fzg f where (f.ServerNr = k.ServerNr) and (k.proId = f.ownerProId) order by f.expReplDate limit 1),0)
) as WMZ

比这快多了:

(select f.expReplDate from da_sakunden_fzg f where (f.ServerNr = k.ServerNr) and ((k.proId = f.ownerProId) or (k.proId = f.proId)) order by f.expReplDate limit 1) as WMZ

有人能解释一下为什么或者更好的办法是让第二个更快吗?

提前致谢:)

最佳答案

(GREATESTCOALESCE 与真题无关。)

它可能会或可能不会更快。这是逻辑...

OR 通常 使用索引消除。

SELECT ... ORDER BY indexed_column LIMIT 1

可能能够使用 indexed_column 找到您想要的 1 行,而无需额外的努力。但是如果你在公式中加入一个OR,它可能需要扫描表格来做OR,然后对结果进行排序,最后做 LIMIT 1 -- 更多的工作。

在您的情况下,您可能有 INDEX(ServerNr, proId, expReplDate),这是每个非 OR 子查询的完美索引,但对于 OR 情况几乎没有用处。

看看EXPLAIN——你会发现一个不同之处,它笨拙地表达了我所说的。 EXPLAIN FORMAT=JSON SELECT... 说得更好。

如果没有“完美”索引,OR 可能会更快。

关于mysql - (为什么?)Greatest+Coalesce 方式比使用 or 的单个选择更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com