Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как лучше два индекса или один? / 9 сообщений из 9, страница 1 из 1
07.05.2010, 10:17
    #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
07.05.2010, 12:13
    #36617069
xz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше два индекса или один?
Ключевое слово MDC.
...
Рейтинг: 0 / 0
07.05.2010, 19:08
    #36618055
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше два индекса или один?
xz321,

А временные таблицы и MDC индексы можно совмещать?
...
Рейтинг: 0 / 0
07.05.2010, 22:02
    #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
09.05.2010, 17:17
    #36619055
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше два индекса или один?
Victor Metelitsa,

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

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

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

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

кстати вопросик еще один мучает меня. если я очень интенсивно юзаю темп-тейблы (импорт данных из dbf - заливаю в темпы, а потом селекчу/джойню как мне надо, используя все навороты дбтушного sql-я) - правильно ли я сделал создав отдельный достаточно большой буфер (80000 4k страниц) буфер пулл и назначил его темповому тейблспейсу?
Может стоит еще с размером страницы поиграться?
...
Рейтинг: 0 / 0
11.05.2010, 20:42
    #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
17.05.2010, 19:52
    #36632895
Anka_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше два индекса или один?
Alexey Kuznetsov,можно посмотреть использование буфферного пула (bufferpools) примерно так db2 select BPNAME, NPPAGES, PAGESIZE, NPAGES*PAGESIZE as RAZM from syscat.bufferpools кажется не соврала, результат табличка со значениями
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как лучше два индекса или один? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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