Базы данных Oracle - статьи



             

Столбцы с небольшим количеством значений - часть 2


Конечно, описательные выражения типа "небольшой", "маленький", "близкий к нулю" требуют определенного уточнения. Например, близко ли значение 10000 к нулю? Если сравнивать с десятью миллиардами, то да!

Не используйте неопределенные выражения вроде "небольшое количество". В большинстве случаев, при выборе индексов на основе битовых карт необходимо учитывать только два фактора. Во-первых, количество различных блоков в таблице, в которых может находиться типичное значение индекса - это основной фактор выбора отдельного индекса. Изменение структуры индекса с B*-дерева на набор битовых карт не сделает этот индекс в это отношении лучше чудесным образом. Во-вторых, используемый оптимизатором Oracle механизм комбинирования нескольких битовых индексов делает их действительно полезными.

Рассмотрим следующий пример, основанный на данных по примерно 64-миллионному населению Великобритании.

  • 50 миллионов имеет карие глаза
  • 35 миллионов - женщины
  • 17 миллионов - темноволосые
  • 1,8 миллиона живет в районе Бирмингема
  • 1,2 миллиона имеет возраст 25 лет
  • 750000 работает в Лондоне
  • Каждому критерию отдельно соответствует очень много людей, но сколько кареглазых темноволосых женщин в возрасте 25 лет живет в Бирмингеме и работает в Лондоне? Где-то пару десятков.

    create table junk as select rownum id from all_objects where rownum

    Рисунок 4. Моделируем население Великобритании.

    Отдельный индекс (будь-то на основе B*-дерева или битовых карт) по любому из этих столбцов будет абсолютно бесполезен для выполнения такого запроса к таким данным в СУБД Oracle.

    Многостолбцовый индекс на основе B*-дерева по соответствующим шести столбцам может существенно помочь, пока нас не заинтересуют мужчины ростом 180 см. с бородой вместо темноволосых и кареглазых женщин.

    Можете поэкспериментировать (см. рис. 4), но понадобиться около 2,0 Гбайт места на диске и пару часов работы процессора с тактовой частотой порядка 500 МГц.

    Из-за нехватки места я построил модель поменьше, эмулирующую население порядка 36 миллионов. Время построения и размеры объектов для компьютера с тактовой частотой процессора 600 МГц, ОС Win2000 и сервером Oracle версии 9.2.0.1 представлены в следующей таблице.

    Объект

    Размер (Мбайт)

    Время построения (мин:сек)

    T1

    845 16:12

    I1 (sex)

    11 1:39

    I2 (eyes)

    16 1:43

    I2 (hair)

    37 2:17

    I4 (town)

    40 2:25

    I5 (age)

    42 2:28

    I6 (work)

    45 2:42
    <


    Содержание  Назад  Вперед