【发布时间】:2011-02-11 10:06:25
【问题描述】:
假设我有一系列查询,这些查询逐渐变得更加昂贵。我可以通过工会加入所有这些,但我只对前 10 名结果感兴趣,所以我添加了一个 LIMIT。查询看起来像这样:
(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
我知道这并不能保证是 MySQL 文档所述的第一个查询的前 10 名
UNION 默认产生一个无序的 行集
但实际上,结果似乎是按顺序选择 1,然后是选择 2,以此类推,直到达到限制。
那么 MySQL 是按顺序执行查询并在达到限制时停止吗?如果不是,那么在只需要结果子集并且优先考虑成本较低的查询以最小化执行时间的情况下,执行这种查询方式的更好方法是什么?
【问题讨论】:
标签: sql mysql query-optimization union