我想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个)吗?我负担不起查询有点慢并且使用文件排序或表扫描。
最佳答案
您不能在简单选择中使用多个索引
由于索引是什么,SQL引擎最多使用一个索引来读取数据。这只是您的行的排序。如果它使用x上的索引,则它读取的数据不是按时间戳顺序排列的;如果它使用时间戳上的索引,则不是x顺序的排列。
您可以要求MySQL解释如何处理查询,这将为您提供查询计划,或者您可以运行查询并查看它是否足够快,还可以尝试提示其他索引以测试是否更好。但是,所有这些事情都不会使事情变得如此简单。
关于mysql - 从两个不同的表中进行选择,两个表具有UNION和ORDER BY的一列->使用索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42108938/