从具有UNION和ORDER BY的两个不同的表中选择两个表具有的一个列 - >使用索引?

时间:2017-02-08 09:13:05

标签: mysql

我想SELECT FROM两个不同的表都有一个带有时间戳(INT)的列。

这个问题的答案(Select separate rows from two tables, order by date)告诉我如何使用UNION ALL来实现这个目标,但我的问题是:如果两个表中有很多条目,这个查询是否可以快速完成?

代码示例可能是:

SELECT id as foo_id, NULL as bar_id, value as foo_value, timestamp as timestamp, NULL as bar_value
FROM foo WHERE x = const.
UNION ALL
SELECT NULL as foo_id, id as bar_id, NULL as foo_value, value as bar_value, timestamp as timestamp
FROM bar WHERE y = const.
ORDER BY timestamp DESC

所以我假设这个查询可以使用x和y的索引,但它是否也可以使用2个索引作为时间戳(每个表1个)?我无法承受查询以某种方式缓慢并使用filesort或表扫描。

1 个答案:

答案 0 :(得分:1)

您无法在简单的选择中使用多个索引

SQL引擎最多使用一个索引来读取数据,因为索引。它只是行的排序。如果它使用x上的索引,那么它读取的数据不是按时间戳顺序排列的,如果它使用时间戳上的索引,则它不是按x顺序排列。

您可以要求MySQL解析它将对查询执行的操作,它将为您提供查询计划,或者您可以运行查询并查看它是否足够快,您可以尝试提示不同的索引来测试你是否选择更好。然而,所有这些事情都不会让它变得不那么复杂。