Имеет смысл только физически упорядочить данные в таблице кучи по индексу первичного ключа, если вы выполняете сканирование диапазона индекса первичного ключа, а затем выполняете поиск по одной строке в таблице. Это, как правило, довольно редко - обычно вы не хотите получать все данные для ORDER_ID
1-100, например, из таблицы ORDER
. Это, вероятно, более распространено, если вы используете естественные, многоколонные первичные ключи, но это несколько необычно.
Если вы обнаружите, что у вас есть таблица, которая подвергается частому сканированию диапазона индекса по первичному ключу, и вы хотите оптимизировать этот конкретный путь доступа, вам почти наверняка будет лучше использовать организованную по индексу таблицу или хеш-кластер в для того, чтобы Oracle позаботился о физическом порядке строк автоматически. Не имеет смысла создавать для себя головную боль при обслуживании, регулярно реорганизуя таблицу, когда вы можете просто поручить Oracle поддерживать порядок. Конечно, оптимизация для этого пути доступа снизит эффективность доступа к таблице через любой другой индекс, так что это далеко не бесплатный вариант.
Даже в случае, когда у вас есть сканирование диапазона индекса по первичному ключу, и компромиссы оптимизации этого пути доступа перевешивают затраты на другие методы доступа к индексу, физический порядок строк в таблице будет иметь Относительно небольшое влияние на стоимость выполнения запроса. Подавляющее большинство запросов и процессов имеют потенциал для гораздо более высоких уровней оптимизации с гораздо меньшим количеством проблем при использовании стандартных методов настройки SQL, а не с порядком строк в таблице.
Предупреждение 1: Если вы пытаетесь сжать таблицу (не используя опцию Advanced Compression), порядок строк в таблице может быть важен, поскольку лучше упорядоченные данные сжимаются легче. Это единственный раз, когда я заботился о физическом порядке данных.
Предупреждение 2: Если у вас есть таблица, которая соответствует всем изложенным критериям, и вы физически упорядочиваете данные в таблице, и вам случается использовать RAC, вы можете в конечном итоге создать гораздо больше межсетевого трафика, концентрируя "интересные" строки на меньшее количество горячих блоков, которые должны постоянно передаваться между узлами. Это может легко компенсировать любую предельную выгоду, которую вы получили от реорганизации таблицы.