powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как лучше два индекса или один?
9 сообщений из 9, страница 1 из 1
Как лучше два индекса или один?
    #36616774
DvaIndexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DB2 express-C 9.5

есть вот такой селект из временной таблички:

Код: plaintext
1.
2.
3.
SELECT *  FROM T1
   WHERE (Object, Type) = (?,  2 )
   ORDER BY FinYear, FinMonth

что лучше сделать 2 индекса по "Object, Type" и по "FinYear, FinMonth"
или один сразу по всем колонкам?

сделал explain - для обоих вариантов выдает одинаковую стоимость, может тогда и не парится? сделать один индекс из 4-х полей, раз стоимость одинаковая.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36617069
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ключевое слово MDC.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36618055
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xz321,

А временные таблицы и MDC индексы можно совмещать?
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36618188
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Express-C когда либо и поддерживала MDC, то не в 9-й версии. Да MDC ещё и, мягко говоря, не панацея от всех болезней.

Какой индекс создать? Неизвестно. Особенно в случае временной таблицы. Какой толк от explain на ней?

Для постоянной я воспользовался db2advis и ожидал бы от него таких вариантов:
1) индекс не нужен
2) (Object, Type) или (Type, Object) (это не равнозначно, кстати)
3) (Object, Type, FinYear, FinMonth) или (Type, Object, FinYear, FinMonth)
хотя
4) (FinYear, FinMonth) нельзя совсем сбрасывать со счёта.

Дело в том, что, в зависимости от данных, наивыгоднейшим может оказаться любой из этих вариантов, хотя я и голосовал бы за 1) или 3).

Для временной таблицы можно создать её постоянный аналог, наполнить данными, собрать статистику и спросить db2advis, что он об этом думает. Это наилучшее, что я могу предложить, но по ряду причин оно может не помочь.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36619055
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,

Без индексов explain выдает total_cost 13000, а с индексами 1800.
Думаю все же от индексов есть толк, а вот за совет поиграться (Object, Type) или (Type, Object) - спасибо, попробую.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36619630
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы статистику-то (по заполненной таблице) собирали? Без этого цифирки в explain лишены особого смысла.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36621742
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,

Нет, не собирал. Почему то считал, что если сначала загрузить все данные, а потом построить индекс, то статистика будет приемлемой. Оказалось что я ошибался.

Провел эксперимент:
1) создал темп-тейбл
2) залил данные
3) сделал эксплейн - выдало 118 попугаев
4) создал индекс, сделал эксплейн выдало 33 попугая
5) сделал ранстатс, сделал эксплейн выдало 22 попугая

но скорость работы программы для 4) и 5) пока разницы не заметил. Разница заметная есть для ситуации без и с индексом.
с индексами быстрее.

кстати вопросик еще один мучает меня. если я очень интенсивно юзаю темп-тейблы (импорт данных из dbf - заливаю в темпы, а потом селекчу/джойню как мне надо, используя все навороты дбтушного sql-я) - правильно ли я сделал создав отдельный достаточно большой буфер (80000 4k страниц) буфер пулл и назначил его темповому тейблспейсу?
Может стоит еще с размером страницы поиграться?
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36621931
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я люблю пользоваться Index Advisor, и потому для batch-процессов пользуюсь обычными таблицами (
drop index...;
alter table ... activate not logged initially with empty table;
import ...;
create index ...;
commit;
runstats ... with distribution and detailed indexes all;
...
).

Полезность нескольких буферных пулов вместо одного зависит от происходящих в системе процессов.

В самом деле, возьмём крайний случай: предположим, днём происходит "обычная" активность, мало затрагивающая temporary, а ночью выполняется ваш скрипт, который (тоже предположим) работает в основном с temporary. Тут два буферпула - пустая растрата оперативной памяти. Разве что, размеры их регулировать. Но с одним проще.

С другой стороны, если параллельно с вашим скриптом каким-то другим процессом частенько запускается какое-нибудь длительное сканирование больших таблиц, таких, что в буферный пул они не влазят, таким большим полносканируемым таблицам лучше быть в табличном пространстве с очень маленьким буферпулом. Ибо в таких случаях, пока у таких таблиц нет шансов влезть в буферный пул целиком, он для них бесполезен, зато их страницы могут вытеснить то, что кешировалось бы с пользой.

Поскольку реальная картина обычно более сложна, то и ответ должен быть более сложен.
...
Рейтинг: 0 / 0
Как лучше два индекса или один?
    #36632895
Anka_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kuznetsov,можно посмотреть использование буфферного пула (bufferpools) примерно так db2 select BPNAME, NPPAGES, PAGESIZE, NPAGES*PAGESIZE as RAZM from syscat.bufferpools кажется не соврала, результат табличка со значениями
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как лучше два индекса или один?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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