У меня есть Oracle 11g DB, и некоторые из таблиц усекаются и повторно импортируются из исходной системы регулярно. У меня нет индекса на этих таблицах (по причинам производительности импорта), хотя у них много миллионов строк. Нужно ли собирать статистику таблиц каждый раз, когда я их импортирую? Когда я обрабатываю таблицу, мне все равно нужно анализировать и обрабатывать каждую строку.Нужно ли собирать статистику по таблице Oracle, у которой нет индекса?
ответ
Статистика оптимизатора должна быть собрана после значительных изменений данных.
Это хорошее общее правило для подражания. Есть исключения, но отсутствие индексов не является достаточно хорошей причиной. Это правда, что одним из основных преимуществ точной статистики является выбор того, следует ли использовать полное сканирование таблицы или доступ к индексу. Но это лишь один из многих способов использования статистики. Например, если Oracle неправильно полагает, что таблица не имеет строк, она может по-прежнему использовать на ней НЕСТАНДАРНУЮ ЗАПИСЬ, что может быть катастрофическим, если в таблице действительно есть миллионы строк.
Настройки могут быть изменены для уменьшения времени сбора статистики. В частности, установка DEGREE
может значительно повысить производительность. 11g имеет отличный по умолчанию ESTIMATE_PERCENT
, но иногда может быть полезно использовать очень низкое значение. Статистика также может быть импортирована из предыдущих запусков, если данные очень схожи.
Еще один фактор, который следует учитывать, заключается в том, что отказ от больших анализируемых таблиц может повлиять на последующие статистические задания. В большинстве баз данных есть ночная работа по сбору устаревших и отсутствующих статистических данных. Даже в хранилище данных часто будет такая работа, но с предположением, что действительно большие задания статистики будут выполняться вручную. Оставляя большие задания статистики для процессов по умолчанию, может перегружать эту систему и заставлять другую статистику устаревания ждать дольше.
С тех пор как вы делаете TRUNCATE
каждый раз, Oracle приносит HIGH WATERMARK
к нулю. Таким образом, вам не нужно беспокоиться об инкрементальном обслуживании.
Но, в отношении выполнения запроса при попадании в стол, вы ДОЛЖНЫ следовать правилам NORMALIZATION
. Проверьте запрос EXECUTION PLAN
, если вы видите FULL TABLE SCAN
для LOW CARDINALITY
, тогда вы должны рассмотреть эту колонку для индексирования.
Я бы предложил метод CTAS
, если вам нужно слишком часто строить таблицу. CTAS означает create table as select
. Это было бы очень эффективно. Кроме того, вы можете использовать NO LOGGING
и другие функции по мере необходимости, чтобы уменьшить UNDO
и REDO
.
- 1. Собирать статистику по индексу или создать капюшон?
- 2. Соберите статистику по таблице разделов
- 3. Как собирать статистику с бистрора?
- 4. Есть ли причина, по которой у Cassandra нет геопространственной поддержки?
- 5. Oracle 12c: собирать статистику только для новых разделов
- 6. Oracle Нужно ли собирать таблицу статистики для новой таблицы с новым индексом?
- 7. Собирать статистику для общего проекта
- 8. Oracle - Получить статистику по запросу
- 9. Как экспортировать статистику Oracle
- 10. Поддерживает ли MongoDB статистику индекса (распределение данных для столбца индекса)?
- 11. Как собирать статистику системы с нуля?
- 12. Oracle вручную обновляет статистику по всем таблицам
- 13. Могу ли я собирать статистику чтения/записи mmap?
- 14. Таблица запросов CakePHP, у которой нет контроллера
- 15. взрывоопасная строка, у которой нет знака цены
- 16. Oracle: идентификация дубликатов в таблице без индекса
- 17. Oracle собирает статистику
- 18. Когда нужно собирать объекты?
- 19. Есть ли причина, по которой у CheckBoxList ASP.NET нет элемента SelectedItems?
- 20. Есть ли причина, по которой нужно встраивать вызовы функций?
- 21. Нужно ли обновлять статистику после усечения и повторного заполнения таблицы
- 22. Есть ли конкретная причина, по которой у javascript нет функции isEqual() для сравнения объектов?
- 23. Строить статистику по дате
- 24. Установите bind9 на машину, у которой нет подключения к Интернету
- 25. производительность функционального индекса oracle
- 26. Создание индекса таблицы Oracle
- 27. ВЫБРАТЬ строки из таблицы, у которой нет связанных записей во второй таблице
- 28. Запрос MySQL по возрастному диапазону по таблице, у которой есть дата рождения
- 29. Maven: Как использовать зависимость, у которой нет собственного репо
- 30. Собирать статистику профилирования из клиентских приложений на рабочем столе
Truncate удаляет затраты на обслуживание против частых DML, поскольку он сбрасывает «HIGH WATERMARK» на ноль. Посмотрите на мой ответ ниже. –
Пожалуйста, прекратите голосование, чтобы переместить эти вопросы в DBA. Этот вопрос четко соответствует всем 4 критериям, перечисленным в [Справочном центре] (http://stackoverflow.com/help/on-topic). В хранилище данных этот вопрос - проблема программиста, а не проблема с DBA. –