小编Luk*_*kas的帖子

MySQL:在内部查询中使用“ORDER BY”优化 UNION

我刚刚建立了一个日志系统,它由多个具有相同布局的表组成。

每个数据源有一个表。

对于日志查看器,我想

  • UNION所有的日志表
  • 按帐户过滤它们
  • 添加一个伪列来识别来源,
  • 按时间排序
  • 限制它们进行分页

所有表都包含一个称为zeitpunkt索引日期/时间列的字段。

我的第一次尝试是:

(SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit,
 'hp' AS source FROM is_log AS l WHERE l.account_id = 730)

UNION

(SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt,
 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730)

ORDER BY zeit DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

优化器无法使用此处的索引,因为来自两个表的所有行都由子查询返回并在UNION.

我的解决方法如下:

(SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit,
 'hp' AS source …
Run Code Online (Sandbox Code Playgroud)

mysql performance order-by subquery union query-performance

11
推荐指数
1
解决办法
3万
查看次数