powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQT и уникальный индекс
15 сообщений из 15, страница 1 из 1
MQT и уникальный индекс
    #38206547
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Хочу создать уникальный индекс на поле MQT.
Поле реально что то типа номера и уникальное (имею право создавать).

Код: plsql
1.
2.
3.
4.
5.
  CREATE UNIQUE INDEX TYPE.OPERATION_IDX1T
  ON TYPE.OPERATION
    ( ID ASC )
  ALLOW REVERSE SCANS
  COMPRESS NO;



Получаю:
Error 01.04.2013 9:28:38 0:00:00.062 <link> - DB2 Database Error: ERROR [42809] [IBM][DB2/NT64] SQL0159N
The statement references "TYPE.OPERATION" which identifies a(n) "MATERIALIZED QUERY TABLE" rather than a(n) "TABLE".

На основной таблице - индекс уникальный.
Это нормально или я чего то не учел?
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206585
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Добрый день.

CREATE INDEX :
Rules
...
Unique indexes on system-maintained MQTs are not supported (SQLSTATE 42809).
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206605
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

Добрый день.

CREATE INDEX :
Rules
...
Unique indexes on system-maintained MQTs are not supported (SQLSTATE 42809).


Спасибо, Марк!
В очередной раз убеждаюсь, что MQT - .овно.
Хотел соптимизировать запрос, поставил в запросе вместо MQT таблицы справочника на 300 строчек - обычную таблицу и построил уникальный индекс по обычной таблице - стало в 2-ва раза быстрее.
Думал вот оно счастье, ан нет - почему то, я даже логически не понимаю почему, нельзя строить уникальный индекс на MQT - это жесть, имхо...
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206621
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Постройте неуникальный индекс на это поле, соберите статистику на mqt и её индексы.
Используется ли теперь индекс в плане запроса?
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206637
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

Постройте неуникальный индекс на это поле, соберите статистику на mqt и её индексы.
Используется ли теперь индекс в плане запроса?

Пробовал, судя по времени выполнения не помогло...
А есть ли в DB2 (9.7) нормальная команда - которая показала бы план запроса или же встроенный визуальный редактор в DB2 Central -который отобразит графически?
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206669
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Есть DB2 Command Editor (или Редактор Команд).
Вызывается либо из DB2 Control Center (4-я кнопка слева вверху в ряду кнопок), либо Start->Run->db2ce.
В нём, соединившись с базой, вводите свой запрос и нажимайте 4-ю слева кнопку вверху в ряду кнопок.
Получите графическое представление плана запроса.
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206788
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

Есть DB2 Command Editor (или Редактор Команд).
Вызывается либо из DB2 Control Center (4-я кнопка слева вверху в ряду кнопок), либо Start->Run->db2ce.
В нём, соединившись с базой, вводите свой запрос и нажимайте 4-ю слева кнопку вверху в ряду кнопок.
Получите графическое представление плана запроса.

Что то план запросы абсолютно разные...
Сам запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
WITH MONITOR_SELECT
(IS_EDITABLE,QUANTITY,DATE,BOOK_DATE) 
AS (
SELECT 
case when coalesce(t1.BOOK_DATE, t1.DATE) >  date('2013-02-28')
	then 'Y'
	else	'N'
	end,
t1.QUANTITY,
t1.DATE,
t1.BOOK_DATE
FROM
 TRANSACTION.LIABILITY_SDEPO t1 
	left  join DOCUMENT.DOC_OPERATION t2 on t1.ID_DOC_OPERATION = t2.ID
	left  join TYPE.OPERATION t21 on t21.ID = t2.ID_OPERATION
WHERE (
 t1.ID_PERSON_FUND = 99 and t1.IS_PLANNED = 'N' and 
(
	t1.DATE <= date('2013-03-27')
	or 
	t1.BOOK_DATE <= date('2013-03-27')
) 
)) 
SELECT IS_EDITABLE,QUANTITY,DATE,BOOK_DATE
FROM MONITOR_SELECT WITH UR



И картинки планов запросов - первая с MQT , вторая с обычной таблицей:
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206792
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл не прикрепился - прикрепляю...
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206865
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Если значения в DOCUMENT.DOC_OPERATION.ID и TYPE.OPERATION.ID уникальные для саоих таблиц, то здесь вы попали в интересную ситуацию, когда уникальность действительно играет роль.
Обратите внимание, что в запросе нет обращений в списке выбора к полям таблиц, отличных от TRANSACTION.LIABILITY_SDEPO.
Т.к. DOCUMENT.DOC_OPERATION и TYPE.OPERATION соединяются по своим уникальным ID, то результат запроса не изменится, если вообще выкинуть эти таблицы из плана доступа, что DB2 и делает.
Если же хотя бы одно из этих ID неуникально, то так делать нельзя, и приходится обращаться к этим таблицам.

Вы вообще к MQT напрямую обращаетесь, или через nickname, на котором построена MQT?
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206889
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

Если значения в DOCUMENT.DOC_OPERATION.ID и TYPE.OPERATION.ID уникальные для саоих таблиц, то здесь вы попали в интересную ситуацию, когда уникальность действительно играет роль.
Обратите внимание, что в запросе нет обращений в списке выбора к полям таблиц, отличных от TRANSACTION.LIABILITY_SDEPO.
Т.к. DOCUMENT.DOC_OPERATION и TYPE.OPERATION соединяются по своим уникальным ID, то результат запроса не изменится, если вообще выкинуть эти таблицы из плана доступа, что DB2 и делает.
Если же хотя бы одно из этих ID неуникально, то так делать нельзя, и приходится обращаться к этим таблицам.

Вы вообще к MQT напрямую обращаетесь, или через nickname, на котором построена MQT?

>>о здесь вы попали в интересную ситуацию,
В последнее время я с DB2 часто попадаю, спасибо - что не бросаете в беде

Через MQT построено - nickname, на котором построена MQT.
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206986
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

вы не ответили на вопрос:
Вы напрямую к mqt обращаетесь в запросах или к самому nickname?

Т.е. вот есть:
- nick1 -> my_remote_table
- mqt1 as (select * from nick1)...

Вы в запросах используете nick1 или mqt1?
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38206999
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

вы не ответили на вопрос:
Вы напрямую к mqt обращаетесь в запросах или к самому nickname?

Т.е. вот есть:
- nick1 -> my_remote_table
- mqt1 as (select * from nick1)...

Вы в запросах используете nick1 или mqt1?

На данный момент mqt1.
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38207013
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

вы не ответили на вопрос:
Вы напрямую к mqt обращаетесь в запросах или к самому nickname?

Т.е. вот есть:
- nick1 -> my_remote_table
- mqt1 as (select * from nick1)...

Вы в запросах используете nick1 или mqt1?

Кстати Марк, вы меня навели на мысль и я поставил в запрос вместо MQT - Nickname (на котором этот MQT базируется) и все залетало и запрос стал, как с таблицей...
Тоесть - данный топик конкретный пример, что NickName круче MQT, раннее вы мне не верили!
Жалко что DB2 не умеет с NickName нормально работать в функциях нельзя with ur и в динамике юзать NickName...
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38207049
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoedНа данный момент mqt1.
Вы можете использовать maintained by user MQT.
Код: plaintext
1.
2.
3.
create table mqt1 as (select ... from nick1)
data initially deferred refresh deferred maintained by user;
set integrity for mqt1 materialized query immediate unchecked;
create unique index mqt1_u on mqt1 (...);

"Refresh" таблицы будет выглядеть так:
Код: plaintext
1.
2.
truncate table mqt1 immediate;
insert into fed.tables_mqt select * from nick1;
runstats on table schema.mqt1 ...;

medoedТоесть - данный топик конкретный пример, что NickName круче MQT, раннее вы мне не верили!Если вы используете в запросах mqt1 напрямую, вам эта вся пляска с MQT вообще ни к чему.
По поводу круче или нет: это как в вопросе забивания гвоздей - молоток действительно круче микроскопа. :)
...
Рейтинг: 0 / 0
MQT и уникальный индекс
    #38207055
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinmedoedНа данный момент mqt1.
Вы можете использовать maintained by user MQT.
Код: plaintext
1.
2.
3.
create table mqt1 as (select ... from nick1)
data initially deferred refresh deferred maintained by user;
set integrity for mqt1 materialized query immediate unchecked;
create unique index mqt1_u on mqt1 (...);

"Refresh" таблицы будет выглядеть так:
Код: plaintext
1.
2.
truncate table mqt1 immediate;
insert into fed.tables_mqt select * from nick1;
runstats on table schema.mqt1 ...;

medoedТоесть - данный топик конкретный пример, что NickName круче MQT, раннее вы мне не верили!Если вы используете в запросах mqt1 напрямую, вам эта вся пляска с MQT вообще ни к чему.
По поводу круче или нет: это как в вопросе забивания гвоздей - молоток действительно круче микроскопа. :)

Мне Ваша Аллегория понравилась
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQT и уникальный индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]