我在分区表上创建了一个视图。当我将分区列传递给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”两个分区。
答案 0 :(得分:0)
VIEWs
的实施存在许多不足之处。你可能已经打了一个。
PARTITIONing
有许多用途没有提供任何性能。 BY RANGE
可能是唯一有助于某些用例的性能的变种。行数少于一百万的表不值得分区。
在没有看到您的CREATE TABLE
,CREATE VIEW
和SELECT
的情况下,我们只能像您一样给出模糊的答案。
(回应添加的代码)除非有更多内容,否则PARTITIONing
以DOB
提供索引没有任何好处。
此外,VIEW
+ PARTITION
方法(没有索引)必须扫描整个2001
分区,查找“2001-01-01”的几行。相反,简单的索引方法可以立即找到它们 - 快365倍。 (好吧,不是那么快,但仍然。)