我有一个观点,女巫的工作是这样的:
CREATE VIEW v_myView as SELECT * FROM(
(SELECT a,b,c,d FROM table1)
UNION ALL
(SELECT a,b,c,d FROM table2)
UNION ALL
(SELECT a,b,c,d FROM table3)
.
.
.)
当我使用视图时,我会像这样过滤它:
SELECT * FROM v_myView WHERE a=x
虽然这是有效的,但它需要一个小时(一个真正的小时,而不是图形来说).如果我这样做一个查询:
SELECT * FROM(
(SELECT a,b,c,d FROM table1 WHERE a=x)
UNION ALL
(SELECT a,b,c,d FROM table2 WHERE a=x)
UNION ALL
(SELECT a,b,c,d FROM table3 WHERE a=x)
.
.
.)
这需要一分钟.这让我想知道是否有办法让MySql自动执行,这意味着在获取每个表之前WHERE命令将起作用
最佳答案 您可能已经知道,第二种方法更快,因为与第一种方法不同,它不会从所有三个表中获取所有结果,然后进行过滤.
Leonard Strashnoy(https://stackoverflow.com/a/5331792/3996196)的答案将是解决这个问题的一种方法,但是创建一个定义过滤变量的函数.
这将类似于以下内容:
功能(用您的类型替换Int)
create function p1() returns INTEGER DETERMINISTIC NO SQL return @p1;
视图
CREATE VIEW v_myView as SELECT * FROM(
(SELECT a,b,c,d FROM table1 WHERE a=p1() )
UNION ALL
(SELECT a,b,c,d FROM table2 WHERE a=p1() )
UNION ALL
(SELECT a,b,c,d FROM table3 WHERE a=p1() )
.
.
.)
查询(用变量替换12)
SELECT * FROM (select @p1:=12 p) parm, v_myView;