我对数据库的查询有一个大问题。
我解释了我的问题,我有 11 个相同的表(备份)。这些表完全相同,我需要从中提取数据,但这需要很长时间。
我正在使用这样的联合查询:
select id, name, ... from table_1 WHERE (...)
UNION
select id, name, ... from table_3 WHERE (...)
UNION
select id, name, ... from table_2 WHERE (...)
... ORDER BY created DESC LIMIT 0,50
但仅查询需要大约 16 秒!数据库没有那么多数据,花了这么长时间......
table_1 = 1.3k
table_2 = 17k
table_3 = 10k
table_4 = 10k
... = 10k
table_11= 140K
你能帮我优化这个查询吗?非常感谢!
最佳答案
首先,不要使用 UNION
—— 除非你想承担删除重复项的开销。相反,使用 UNION ALL
:
select id, name, ... from table_1 WHERE (...)
UNION ALL
select id, name, ... from table_3 WHERE (...)
UNION ALL
select id, name, ... from table_2 WHERE (...)
...
ORDER BY created DESC
LIMIT 0, 50;
您还可以通过使用适合 WHERE
子句的索引来提高性能。但是,您的问题没有足够的信息。
实际上,另一个优化是在联合之前从每个子查询中获取前 50 行:
(select id, name, ... from table_1 WHERE (...) ORDER BY created DESC LIMIT 50)
UNION ALL
(select id, name, ... from table_3 WHERE (...) ORDER BY created DESC LIMIT 50)
UNION ALL
(select id, name, ... from table_2 WHERE (...) ORDER BY created DESC LIMIT 50)
...
ORDER BY created DESC
LIMIT 0, 50;
这减少了最终 ORDER BY
的数据量,这也应该加快速度。
关于mysql - SQL QUERY - UNION - 多个相同的表需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039003/