【发布时间】:2013-07-18 10:44:43
【问题描述】:
我都, 我有 2 个类似的非常大的表(每个 1M 行),布局相同,我会将它们合并并按一个公共列排序:开始。我也会在“开始”中设置一个条件,即:开始> X。 问题是视图不关心 start 的索引,复杂度上升很多,一个简单的查询大约需要 15 秒,插入 LIMIT 并不能解决,因为结果首先被切断。
CREATE VIEW CDR AS
(SELECT start, duration, clid, FROM cdr_md ORDER BY start LIMIT 1000)
UNION ALL
(SELECT start, duration, clid, FROM cdr_1025 ORDER BY start LIMIT 1000)
ORDER BY start ;
查询:
SELECT * FROM CDR WHERE start>10
不返回预期结果,因为 LIMIT 关键字预先切断了结果。
预期结果将是这样的查询:
CREATE VIEW CDR AS
(SELECT start, duration, clid, FROM cdr_md WHERE start>X ORDER BY start LIMIT 1000)
UNION ALL
(SELECT start, duration, clid, FROM cdr_1025 WHERE start>X ORDER BY start LIMIT 1000)
ORDER BY start ;
有没有办法避免这个问题? 谢谢大家 法布里奇奥
【问题讨论】:
-
您是否在
start上创建了索引?
标签: mysql view union complexity-theory