gpt4 book ai didi

mysql - MySQL 会优化联合查询的下半部分吗

转载 作者:行者123 更新时间:2023-11-29 00:59:23 25 4
gpt4 key购买 nike

如果我对应返回的结果数施加 LIMIT 语句,MySQL 是否有任何方法(或自动)优化 UNION ALL 查询的下半部分。例如,如果我有这样的查询:

SELECT ID FROM MyTable WHERE Match (NameColumn) Against ('seachterm')
UNION ALL
SELECT ID FROM MyTable WHERE (DescriptionColumn) Against ('seachterm')
LIMIT 10;

如果我运行此查询并且第一个名称匹配查询返回 15 个结果,则没有理由运行第二个查询,因为我已经有足够的结果。 MySQL 是否优化了第二个查询,或者有没有办法告诉它这样做?基于在前面使用 EXPLAIN EXTENDED 执行查询,看起来好像第二部分没有被优化掉。

最佳答案

经过一些测试,似乎即使它确实在“EXPLAIN”输出中显示了第二个查询,但如果需要,它不会运行第二个查询。我执行了以下查询:

SELECT ID FROM MyTable WHERE Match (NameColumn) Against ('seachterm')
UNION ALL
SELECT ID FROM MyTable WHERE (DescriptionColumn) Against ('seachterm')
UNION ALL
SELECT ID FROM MyTable WHERE DescriptionColumn LIKE '%seachterm%'
LIMIT 10;

现在,在一个300万行的表中,最后一个查询应该花很长时间(而且我单独测试过,确实需要很长时间),但是当作为联合的一部分添加时,它不会完全减慢查询速度,因为它甚至没有必要运行它,因为我们从前两个语句中获得了足够的行。如果我将 Limit 增加到一个更大的数字,以至于我无法从前两个查询中获得足够的结果,那么第三个查询就会发挥作用并开始显着减慢查询速度。

关于mysql - MySQL 会优化联合查询的下半部分吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4379828/

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