带有LIMIT的SQL UNION是否优化了不需要的查询?

Dol*_*lbz 5 mysql sql union query-optimization

假设我有一系列逐渐变得更加昂贵的查询.我可以加入所有这些联盟,但我只对前十名结果感兴趣,所以我添加一个限制.查询看起来像这样:

(SELECT col1, col2 FROM table WHERE colx = 'x')
UNION
(SELECT col1, col2 FROM table WHERE colx LIKE '%x%')
UNION
(SELECT col1, col2 FROM table WHERE colx LIKE '%x%' AND unindexedcol LIKE '%y%')
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我知道这不能保证是MySQL文档所述的第一个查询的前10名

UNION默认生成一组无序行

但在实践中,似乎结果是按顺序选择1,然后选择2等,直到达到限制.

那么MySQL是否按顺序执行查询并在达到限制时停止?如果没有那么什么是更好的方法来执行这种查询样式,其中只需要一小部分结果,并且优先考虑较便宜的查询以最小化执行时间?

Lor*_*col 4

我做了一个测试来证明 MySQL 不会优化这种查询:首先我执行这个查询:

select @a1 := 0;
select @a2 := 0;

(SELECT id, @a1:=@a1+1 FROM companies)
UNION
(SELECT id, @a2:=@a2+1 FROM invoices)
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

然后我观察 @a1 和 @a2 变量的值:

select @a1 as a1, @a2 as a2;
Run Code Online (Sandbox Code Playgroud)

在我的测试中,它们是a1 = 81和a2 = 467。因此联合查询的单选不受限制。