我在MySQL中创建了一个视图,如下所示
create view vtax
as
SELECT * FROM table1
union
SELECT * FROM table2;
表 1 中有 800000 条记录,表 2 中有 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
我已经分别在表上创建了索引。
任何帮助/想法应该做什么。
联盟
对结果执行不同的操作(通常为排序)。你能用吗
全部联盟
?(即行是否不同?
你应该比较苹果和苹果。联合通常比简单查询慢得多。将并集与视图进行比较。您会注意到标准联合查询也很慢。优化程序可能在决定最佳路径时遇到问题。检查其他一些问题,例如:为什么 MySQL 中的 UNION 查询如此缓慢?
如注释中所述,视图未在MySQL中索引。
如果在查询中使用联合:
SELECT * FROM table1 WHERE col1 = 'value'
UNION
SELECT * FROM table2 WHERE col1 = 'value'
然后可以使用索引(如果有的话)。