Какой индекс (ы) я должен создать для Oracle таблиц в зависимости от того, как я их запрашиваю? - PullRequest
0 голосов
/ 29 марта 2020

У меня есть две таблицы со многими столбцами, для которых мне нужно создать индекс (ы) на основе наиболее распространенных способов фильтрации таблиц при запросе.

Первичный ключ таблицы 1 - это столбцы A, B, C, D и E.

Первичным ключом таблицы 2 являются столбцы A, B, C и F.

Таблица 2 будет оставлена ​​присоединенной к таблице 1 для столбцов A, B, C и F.

Обе таблицы уже имеют индекс первичного ключа, и я также создал индекс для таблицы 1, используя столбцы A, B, C и F, поскольку это внешний ключ.

При запросе к таблицам фильтр всегда будет состоять из столбцов A, B и C и одного из других столбцов в таблице 1 или 2.

Столбцы A, B и C вместе имеют несколько сотен комбинаций.

Другие столбцы, которыми может быть четвертый столбец в фильтре, следующие:

  • D (таблица 1): миллионы возможных значений
  • F (обе таблицы): миллионы возможных значений
  • G (таблица 1): миллионы возможных значений
  • H (таблица 1): 9 возможных значений
  • I (таблица 1): сотни возможных значений
  • J (таблица 2 ): Миллионы возможных значений
  • K (таблица 2): миллионы возможных значений
  • L (таблица 2): тысячи возможных значений
  • M (таблица 2): Сотни возможных значений
  • N (таблица 2): 14 возможных значений

Я пытаюсь выяснить, как лучше всего создать индексы для этих таблиц. Могу ли я создать один дополнительный индекс для каждой таблицы со всеми столбцами этой таблицы, которые потенциально будут использоваться в фильтре? Есть ли какой-нибудь оптимальный способ создать несколько индексов с различными комбинациями вышеперечисленных столбцов в зависимости от количества уникальных значений? И для каждого индекса, который я создаю, как узнать, в каком порядке лучше всего размещать столбцы?

Одна вещь, которую я уже пробовал, - это создание индекса для каждого возможного способа запроса таблиц. Но я быстро понял, что это невозможно, когда значительно сократилось время, необходимое для вставки данных в таблицы, и в итоге закончилось табличное пространство UNDO.

1 Ответ

0 голосов
/ 07 мая 2020

Я бы рекомендовал отбросить все индексы, кроме тех, которые необходимы для модели данных (т. Е. Для pk и fk).

Затем я бы попытался получить репрезентативную тестовую нагрузку (легче сказать, чем сделать, Я знаю).

Теперь вы можете использовать Oracle SQL Access Advisor , чтобы порекомендовать индексы, обеспечивающие некоторую выгоду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...