2016-12-29 3 views
-1

Я создал представление о секционированной таблице. Когда я передаю секционированный столбец в оператор 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».

+0

Покажите нам выходы 'show create table [partitioned table]' и 'show create view [your_view]', после чего мы можем подробнее рассказать .. –

+0

См. обновленный вопрос выше. –

ответ

0

Существует множество недостатков в реализации VIEWs. Вы может ударил один.

Существует много применений PARTITIONing, которые не обеспечивают никакой производительности. BY RANGE, вероятно, единственный вариант, который помогает производительности для некоторых прецедентов. Стол с менее чем миллионом строк не стоит разбивать на разделы.

Не видя своих CREATE TABLE, CREATE VIEW и SELECT, мы можем дать вам неясные ответы, как у меня.

(Отвечая на добавленный код) Если это не так, PARTITIONing таким образом не дает преимуществ по сравнению с индексом DOB.

Кроме того, подход VIEW + PARTITION (без индекса) должен сканировать весь раздел 2001, который ищет несколько строк для '2001-01-01'. Вместо этого простой индексный подход может найти их сразу - в 365 раз быстрее. (ОК, на самом деле это не намного быстрее, но все же.)

+0

Привет, Рик! Я редактировал свой вопрос с образцом кода. Пожалуйста, взгляните на это. –

Смежные вопросы