2014-12-02 5 views
0

У меня есть временная таблица #Data, что я заполняю внутри хранимой процедуры.SQL Index - Recreate after DELETE

Он содержит 15M строк.

Затем я создаю кластерный индекс, скажем IX_Data, для пары столбцов таблицы температур #Data.

Затем я удаляю из #Data, который удаляет строки 1M (сохраняя теперь полные строки 14M).

Мой вопрос: на этом этапе, следует ли отказаться от IX_Data и воссоздать его?

#Data далее упоминается в остальной части хранимой процедуры только в одном месте.

+2

Какова мотивация вопроса? Почему вы спрашиваете? –

+0

Поскольку вы упоминаете * кластерный индекс *, я предположил, что это для 'sql-server' - правильно? ** SQL ** - это только язык запросов, а не продукт базы данных, поэтому на самом деле этого недостаточно, чтобы помочь вам. Пожалуйста, всегда скажите нам, что ** конкретная база данных ** ('sql-server',' oracle', 'mysql',' postgresql' и т. Д.) И какая версия/издание вы используете! –

+0

Извините, народ забыл упомянуть. Я использую SQL Server 2014 – GreenBinary

ответ

1

Вы не должны. Индексы поддерживаются dbms автоматически и всегда сохраняются в синхронизации.

Вот почему не рекомендуется создавать больше индексов, чем вам нужно, так как это штраф за производительность для каждого запроса DML.

0

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

Итак, откуда вы узнали, что ваш индекс фрагментирован (так что вам нужно воссоздать, или лучше, rebuild it)? У каждой базы данных есть свой метод. Oracle имеет внутренние таблицы, из которых вы можете определить, фрагментирован ли объект.

Но это зависит от вашего типа базы данных.

+0

Я использую SQL Server 2014. Похоже, я могу удалить drop и создать индексную инструкцию из моего proc. – GreenBinary

Смежные вопросы