Как переупорядочить строки таблицы в физическом порядке на диске? - PullRequest
2 голосов
/ 22 марта 2011

На практике многие специалисты по настройке Oracle SQL будут повторно упорядочивать строки таблицы в том же физическом порядке, что и основной индекс.

Источник: http://www.remote -dba.net/t_op_sql_index_access.htm

Как можно переупорядочить строки таблицы в физическом порядке на диске?Это «Индекс Организованные таблицы»?

Ответы [ 3 ]

4 голосов
/ 22 марта 2011

Имеет смысл только физически упорядочить данные в таблице кучи по индексу первичного ключа, если вы выполняете сканирование диапазона индекса первичного ключа, а затем выполняете поиск по одной строке в таблице. Это, как правило, довольно редко - обычно вы не хотите получать все данные для ORDER_ID 1-100, например, из таблицы ORDER. Это, вероятно, более распространено, если вы используете естественные, многоколонные первичные ключи, но это несколько необычно.

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

Даже в случае, когда у вас есть сканирование диапазона индекса по первичному ключу, и компромиссы оптимизации этого пути доступа перевешивают затраты на другие методы доступа к индексу, физический порядок строк в таблице будет иметь Относительно небольшое влияние на стоимость выполнения запроса. Подавляющее большинство запросов и процессов имеют потенциал для гораздо более высоких уровней оптимизации с гораздо меньшим количеством проблем при использовании стандартных методов настройки SQL, а не с порядком строк в таблице.

Предупреждение 1: Если вы пытаетесь сжать таблицу (не используя опцию Advanced Compression), порядок строк в таблице может быть важен, поскольку лучше упорядоченные данные сжимаются легче. Это единственный раз, когда я заботился о физическом порядке данных.

Предупреждение 2: Если у вас есть таблица, которая соответствует всем изложенным критериям, и вы физически упорядочиваете данные в таблице, и вам случается использовать RAC, вы можете в конечном итоге создать гораздо больше межсетевого трафика, концентрируя "интересные" строки на меньшее количество горячих блоков, которые должны постоянно передаваться между узлами. Это может легко компенсировать любую предельную выгоду, которую вы получили от реорганизации таблицы.

3 голосов
/ 22 марта 2011

Как правило, это не так.

Это возможно с

СОЗДАТЬ СТОЛ ... КАК ВЫБРАТЬ .... ЗАКАЗАТЬ

Но затем вы начинаете отбрасывать старую таблицу и переименовывать новую - плюс гранты, ограничения и т. Д.

Но IOT должны быть организованы по первичному ключу.Это может быть не «первичный» индекс, если вы имеете в виду индекс, используемый для большинства сканирований диапазона в таблице.

Рассмотрим таблицу CUSTOMERS с идентификатором в качестве первичного ключа и именем клиента,Если вы ищете клиента на основе идентификатора, то кластеризация не принесет никакой пользы, потому что вы на самом деле не интересуетесь клиентами с идентификаторами чуть выше или ниже.Если вы ищете клиентов с именем «Seinfeld», то вы должны выполнить сканирование диапазона, и может быть полезным иметь все записи таблицы Seinfeld в одном блоке.Если вы затем будете фильтровать по имени, вам лучше включить его в индекс, чтобы вам не нужно было обращаться к записям таблицы.

В таблице 'ORDER_LINES' вы бывозможно, все равно найдите все строки для определенного ордера в одном и том же блоке, так как они, вероятно, созданы одновременно.Фактор кластеризации для индекса скажет вам.

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

2 голосов
/ 22 марта 2011

Обычно один использует sql-загрузчик для выгрузки и загрузки таблицы. Тем не менее, см. Статьи Тома Кайта о перезагрузке таблиц и несбалансированных индексах об их побочных эффектах.

Упорядоченная по индексу таблица представляет собой обоюдоострый меч: да, она помещает данные таблицы в тот же блок, что и индекс (первичный ключ), тем самым избегая ввода-вывода на 1 диск. Это также означает, что объем данных, которые должны быть прочитаны для доступа к этой таблице, увеличивается всякий раз, когда к ней нужно обращаться в любом другом порядке.

Наилучшим назначением для IOT является таблица поиска или таблица проверки, где помимо значения ключа мало дополнительной информации.

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