Желателен ли КЛАСТЕРНЫЙ ИНДЕКС при загрузке отсортированного файла загрузки в новую таблицу?

INFORMIX-SE:

Мои пользователи периодически запускают сценарий SQL [REORG.SQL], который выгружает все строки из таблицы в отсортированном порядке в два отдельных файла (активные и неактивные), удаляет таблицу, повторно создает таблицу, загружает отсортированные файлы загрузки обратно в нее, создает индекс кластера в том же столбце, по которому я отсортировал свои файлы выгрузки, создает другие вспомогательные индексы и обновляет свои статистика.

(См. Сценарий REORG.SQL по адресу: SE: аномалия 'bcheck -y' )

(См. Также: customer.pk_name, присоединяющееся к транзакциям.fk_name vs. customer.pk_id [серийный ] присоединение к transaction.fk_id [integer] по причине, почему индекс кластера определяется по имени, а не pk_id [serial] = fk_id [int])

С моим сценарием REORG.SQL у меня были проблемы с согласованностью файла индекса поэтому я подозревал, что КЛАСТЕРНЫЙ ИНДЕКС имеет какое-то отношение к этому, и создал индекс без кластеризации, и проблемы исчезли!

Теперь мой вопрос: если мне удастся загрузить все мои данные о транзакциях, отсортированные по полному имени клиентов, во вновь созданную таблицу, действительно ли мне нужно создавать КЛАСТЕРНЫЙ ИНДЕКС, когда на самом деле строки уже отсортированы в в том же порядке, что и при кластеризации? .. Я знаю, что кластеризованный индекс начинает терять свою кластеризацию по мере добавления новых строк, так в чем же преимущество создания кластерного индекса? ..использует ли оптимизатор запросов преимущества кластеризации по сравнению с некластеризованным индексом, когда строки по существу находятся в одном кластеризованном порядке? .. Кто-нибудь сталкивался с проблемами файла IDX / DAT при кластеризации таблицы? .. Возможно, в моем сценарии SQL что-то не так с этим? (ПОЖАЛУЙСТА, ПРОСМОТРЕТЬ МОЙ СКРИПТ-КОД SQL, ЧТОБЫ УЗНАТЬ, ЕСЛИ Я ДЕЛАЮ ЧТО-ТО НЕПРАВИЛЬНО?)

1
задан Community 23 May 2017 в 12:19
поделиться

1 ответ

Сценарий выгружает активные и неактивные транзакции в два разных файла, причем каждый файл отсортирован по имени клиента. Затем он загружает их обратно в таблицу, сначала активные транзакции, а затем неактивные транзакции. Затем создается кластерный индекс по имени клиента. Проблема в том, что база данных теперь должна вернуться и переупорядочить физические строки по имени клиента при построении кластеризованного индекса. Хотя каждый из файлов выгрузки отдельно упорядочивается по имени клиента, когда они объединяются, результат не упорядочивается по имени клиента, что вызывает больше работы для базы данных.Если отдельные файлы для активных и неактивных транзакций не нужны где-либо еще, вы можете попробовать просто выгрузить все транзакции в один файл, отсортированный по имени клиента, а затем повторно загрузить таблицу из этого единственного файла. В этот момент данные в таблице будут упорядочены по имени клиента, и при создании кластерного индекса не нужно будет переупорядочивать данные.

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

Делитесь и наслаждайтесь.

2
ответ дан 2 September 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: