MySQL - 通过视图访问分区
问题描述:
我在分区表上创建了一个视图。当我将分区列传递给SELECT语句时,优化程序在通过EXPLAIN语句检查时不会访问该特定分区。MySQL - 通过视图访问分区
有什么办法让视图访问它的表的单个分区?
[编辑]:这是我如何创建两个分区表
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';
认为当我运行的“解释”,它显示优化器将两个分区“p_2000”和“p_2001”。
答
执行VIEWs
有很多不足之处。你可能已经命中一个。
PARTITIONing
有很多用途,不提供任何性能。 BY RANGE
可能是帮助某些用例的性能的唯一变体。少于一百万行的表是不值得分区的。
没有看到您的CREATE TABLE
,CREATE VIEW
和SELECT
,我们只能给你像我一样模糊的答案。
(回应添加的代码)除非有其他更多的信息,PARTITIONing
以这种方式提供没有任何好处,因为在DOB
上有索引。
此外,VIEW
+ PARTITION
方法(无索引)必须扫描整个2001
分区,寻找'2001-01-01'的几行。相反,简单的索引方法可以立即找到它们 - 速度是365倍。 (好吧,不是那么快,但仍然)
+0
嗨瑞克!我用示例代码编辑了我的问题。请看看它。 –
向我们展示'show create table [partitioned table]'和'show create view [your_view]'的输出结果,那么我们可以告诉更多.. –
请参阅上面更新了问题。 –