【发布时间】:2014-10-12 18:20:36
【问题描述】:
有什么方法可以强制 MySQL 将谓词推送到视图中?
例子:
CREATE TABLE t1(
id INT(11) NOT NULL AUTO_INCREMENT
PRIMARY KEY (id)
);
CREATE VIEW v1
AS SELECT * FROM t1;
下面的查询不会使用 MySQL 中的 PRIMARY KEY 索引:
SELECT *
FROM v1
WHERE id = 1
相反,它会从 t1 中选择所有内容,创建一个派生表,然后将其过滤掉以获取 id = 1。
有什么办法可以克服吗?
PS:我在现实生活中的例子比上面的例子稍微复杂一点,但为了简单起见,我使用了上面的例子
PPS:这是一个相关的 Stack Overflow 问题:How do I get MySQL to use an INDEX for view query?
【问题讨论】:
-
子查询似乎也不支持。
-
实体框架 (MSVS 2014) 生成查询,其中 from 子句实际上是子查询,并且此表单不会发生谓词推送: select * from (select * from someView) sv where x = x;