Oracle 12c - какой индекс следует использовать для таблицы с разделами и подразделами
У меня есть таблица 500M записей в Oracle 12c. Таблица разбита на 1 столбец varchar и подразделяется на другой столбец varchar.
Какие индексы следует использовать с запросами, которые используют эти 2 столбца в предложении Where?
Я предполагаю, что локальные многораздельные индексы - лучший выбор, но я хотел бы получить больше информации о том, когда это так и как лучше их создавать?
1 ответ
Oracle способен сокращать разделы, что означает, что если в вашем запросе есть столбец (и) ключа раздела в предложении where, Oracle достаточно умен, чтобы запрашивать только те разделы, которые имеют отношение к делу. В таком случае локальный многораздельный индекс является более выгодным, поскольку он является "локальным по отношению к разделу", то есть индекс также разделен таким же образом, и Oracle будет считывать только соответствующие записи индекса для тех соответствующих разделов.
Однако, если у вас есть запрос, в столбце (ключах) раздела которого нет условия в предложении where, Oracle не может применить сокращение раздела и не будет другого выбора, кроме как сканировать все локальные разделенные индексы или, в худшем случае, всю таблицу для данных. Здесь глобальный многораздельный индекс пригодится для тех столбцов, которые находятся в предложении where. В этом случае Oracle создает индекс по этим столбцам между разделами и точно знает, какие записи нужно прочитать, из каких разделов, которые соответствуют предложению where инструкции.