MySQL - 通过视图访问分区

时间:2016-12-29 12:39:14

标签: mysql view partitioning

我在分区表上创建了一个视图。当我将分区列传递给SELECT语句时,优化器在通过EXPLAIN语句检查时不会访问该特定分区。

有没有办法让视图访问其表的单个分区?

[编辑]:这是我在两个分区表上创建视图的方法

CREATE TABLE Partition1 (ID INT,NAME VARCHAR(100),DOB DATE)
PARTITION BY LIST (YEAR(DOB))
(
    PARTITION P_2000 VALUES IN (2000),
    PARTITION P_2001 VALUES IN (2001)
);

CREATE TABLE NOPART (ID INT,DOB DATE)
PARTITION BY LIST (YEAR(DOB))
(
    PARTITION P_2000 VALUES IN (2000),
    PARTITION P_2001 VALUES IN (2001)
);

CREATE OR REPLACE VIEW P_VIEW
AS
SELECT ID,DOB
FROM PARTITION1
UNION
SELECT ID,DOB
FROM NOPART;

EXPLAIN
SELECT * FROM P_VIEW
WHERE DOB = '2001-01-01';

当我运行“Explain”时,它显示优化器将进入“p_2000”和“p_2001”两个分区。

1 个答案:

答案 0 :(得分:0)

VIEWs的实施存在许多不足之处。你可能已经打了一个。

PARTITIONing有许多用途没有提供任何性能。 BY RANGE可能是唯一有助于某些用例的性能的变种。行数少于一百万的表不值得分区。

在没有看到您的CREATE TABLECREATE VIEWSELECT的情况下,我们只能像您一样给出模糊的答案。

(回应添加的代码)除非有更多内容,否则PARTITIONingDOB提供索引没有任何好处。

此外,VIEW + PARTITION方法(没有索引)必须扫描整个2001分区,查找“2001-01-01”的几行。相反,简单的索引方法可以立即找到它们 - 快365倍。 (好吧,不是那么快,但仍然。)