MySql视图与其基本查询相比较慢

时间:2015-04-25 07:22:10

标签: mysql performance indexing views

我在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

我已经分别在表上创建了索引。

任何帮助/想法应该做什么。

3 个答案:

答案 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'

然后可以使用索引(如果有的话)。