我在MySQL中创建了一个视图
create view vtax
as
SELECT * FROM table1
union
SELECT * FROM table2;
表1中有800000条记录,而table2有500000条记录,当我运行独立查询时,结果以0.078秒的速度返回,但是当我在视图中运行时,它的时间超过10- 15秒。
select * from vtax where col1=value; -- takes more than 10-15 secs
select * from table1 where col1=value; -- takes 0.078 secs
select * from table2 where col1=value; -- takes 0.078 secs
我已经分别在表上创建了索引。
任何帮助/想法应该做什么。
答案 0 :(得分:3)
UNION
对您的结果执行不同的处理(通常是一种排序)。你能用吗
UNION ALL
? (即行是不同的?)
答案 1 :(得分:0)
你应该比较苹果和苹果。联合通常比简单查询慢得多。将联合与视图进行比较。您会注意到标准联合查询也很慢。可能优化器在确定最佳路径时存在问题。检查一些其他问题,例如:Why are UNION queries so slow in MySQL?
答案 2 :(得分:0)
如评论中所述,视图未在MySQL中编入索引。
如果在查询中使用union:
SELECT * FROM table1 WHERE col1 = 'value'
UNION
SELECT * FROM table2 WHERE col1 = 'value'
然后可以使用索引(如果有的话)。