По неуникальным индексам, простой поиск в гугле приводит сразу несколько тех самых отрицательных отзывов
допустим, но с тормозами при удалении мусора в индексах уже разобрались в ФБ 2, а кроме того, индексы сами по себе быстрее начиная с ФБ 2.1.
http://www.ibase.ru/devinfo/rs-win-se-ind.gif
http://www.ibase.ru/devinfo/restorespeed.htm
Правда когда я читал те статьи - там ещё не было поправок на 2.0, вроде как...
вот именно. А статья delmany вообще была написана во времена царя гороха. Диски нынче раз в 10 быстрее как минимум.
В общем, давным-давно сложились предубеждения по неуникальным индексам, и ни разу их не создавал.
предубеждение, основанное на неверном понимании информации. Неуникальный индекс - это индекс, не контролирующий уникальность ключей.
Что Вы туда запихнете - ваше дело. Можете туда запихнуть миллионы одинаковых значений, и будет плохо. Можете туда запихнуть десять тысяч разных значений на миллион записей - и будет хорошо. Так что здесь все относительно.
Я так понимаю, что для реализации моей задачи (хранилище данных, организованное по принципам OLAP) подойдут неуникальные индексы, созданные по некоторым, наиболее предпочтительным измерениям?
именно так. Причем нужно просто посмотреть, если где-то будут совсем неуникальные значения, типа, 2-3 на миллион, то да, по такому столбцу индекс строить не надо.
Или же всё-таки создать множество составных индексов?
о боже

я же Вам показал, что даже в Вашем примере составной индекс по факту не работает, т.е. он используется только по столбцу DIM1. И Вы правильно привели цитату из dataaccesspaths, но разве у Вас все сегменты индекса (кроме последнего) будут проверяться на равенство?
В первый объединить (DIM1, DIM1_FIL1, DIM1_FIL2), во второй (DIM2, DIM2_FIL3, DIM2_FIL4, DIM2_FIL5) и т.д.
дальше-то что делать с этими индексами? Ваши запросы всегда будут искать по
where DIM1 = X and DIM1_FIL1 = Y and DIM1_FIL2 > Z ?
Вы как-то упорно не хотите представить себе, как будут храниться данные в Ваших композитных индексах
Более того. Например, если столбец DIM1 имеет уникальность значений выше, чем остальные столбцы, то тогда вообще даже при where по трем столбцам может хватить индекса только по столбцу DIM1.
Допустим,
where DIM1 = X and DIM1_FIL1 = Y
отбирает 10 записей, которые являются пересечением 15-ти записей по индексу DIM1 и 100 записей по индексу DIM1_FIL1. Композит по этим двум столбцам, конечно, выдаст информацию быстрее, чем один индекс по DIM1, но даже если будет только индекс по DIM1, сервер выберет 15 записей, и лишние 5 отсечет по условию DIM1_FIL1 = Y.
Так что при создании индексов нужно смотреть на данные, и на ИХ селективность. А композитными индексами пользоваться только если есть "фиксированные" запросы, которые всегда в where имеют четкий перечень столбцов с четкими условиями.