Как выбрать и оптимизировать индексы оракула? [закрытый]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

30
задан Brian Tompsett - 汤莱恩 26 March 2016 в 17:34
поделиться

6 ответов

Документация Oracle имеет превосходный набор соображений для индексации выбора: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Заключение в кавычки:

  • Рассматривают ключи индексации, которые часто используются в операторах Where.

  • Рассматривают ключи индексации, которые часто привыкли к объединяющим таблицам в SQL-операторах. Для получения дополнительной информации об оптимизации соединений посмотрите раздел "Using Hash Clusters for Performance".

  • Выбирают индексные ключи, которые имеют высокую селективность. Селективность индекса является процентом строк в таблице, имеющей то же значение для индексируемого ключа. Селективность индекса оптимальна, если немного строк имеют то же значение.Примечание: Oracle автоматически создает индексы или использует существующие индексы на ключах и выражениях уникальных и первичных ключей, которые Вы определяете с ограничениями целостности. Индексация низких столбцов селективности может быть полезной, если распределение данных скашивается так, чтобы одно или два значения происходили намного менее часто, чем другие значения.

  • не используют стандартные индексы B-дерева на ключах или выражениях с немногими отличными значениями. Такие ключи или выражения обычно имеют плохую селективность и поэтому не оптимизируют производительность, если часто выбираемые значения ключа не появляются менее часто, чем другие значения ключа. Можно использовать растровые индексы эффективно в таких случаях, если индекс часто не изменяется, как в высоком приложении OLTP параллелизма.

  • не Делают столбцов индекса, которые часто изменяются. Операторы ОБНОВЛЕНИЯ, которые изменяют индексированные столбцы и ВСТАВЛЯЮТ и Операторы удаления, которые изменяют индексируемые таблицы, занимают больше времени, чем если бы не было никакого индекса. Такие SQL-операторы должны изменить данные в индексах, а также данные в таблицах. Они также генерируют дополнительную отмену и восстановление.

  • не индексируют ключи, которые появляются только в операторах Where с функциями или операторами. Оператор Where, который использует функцию кроме МИН или МАКСА или оператора с индексируемым ключом, не делает доступным путь доступа, который использует индекс кроме с функциональными индексами.

  • Рассматривают внешние ключи индексации ограничений ссылочной целостности в случаях, в которых большое количество параллельной ВСТАВКИ, ОБНОВЛЕНИЯ и Операторов удаления получает доступ к родительским и дочерним таблицам. Такой индекс позволяет ОБНОВЛЕНИЯ и УДАЛЯЕТ на родительской таблице без разделяемой блокировки дочернюю таблицу.

  • При желании индексировать ключ, рассмотрите, стоит ли увеличение производительности для запросов потери производительности для ВСТАВОК, ОБНОВЛЕНИЙ, и УДАЛЯЕТ и использование пространства, требуемого сохранить индекс. Вы могли бы хотеть экспериментировать путем сравнения времени обработки SQL-операторов с и без индексов. Можно измерить время обработки со средством трассировки SQL.

53
ответ дан David Aldridge 27 November 2019 в 23:29
поделиться

Существуют некоторые вещи, которые необходимо всегда индексировать:

  • Первичные ключи - им дают индекс автоматически (если Вы не определяете подходящий существующий индекс для Oracle для использования)
  • Уникальные ключи - им дают индекс автоматически (так же)
  • Внешние ключи - это не автоматически индексировано, но необходимо добавить для предотвращения проблем производительности, когда ограничения проверяются

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

10
ответ дан Tony Andrews 27 November 2019 в 23:29
поделиться

От 10-граммового Руководства Разработчиков Приложения базы данных Oracle - Основные принципы, Глава 5:

В целом, необходимо создать индекс на столбце в любой из следующих ситуаций:

  • столбец часто запрашивается.
  • ограничение ссылочной целостности А существует на столбце.
  • ограничение целостности УНИКАЛЬНОГО КЛЮЧА А существует на столбце.

Использование следующие инструкции для определения, когда создать индекс:

  • Создают индекс, если Вы часто хотите получить меньше, чем приблизительно 15% строк в большой таблице. Этот пороговый процент варьируется значительно, однако, согласно относительной скорости сканирования таблицы и насколько кластеризованный данные строки об индексном ключе. Чем быстрее сканирование таблицы, тем ниже процент; чем более кластеризованный данные строки, тем выше процент.
  • Столбцы индекса, которые используются для соединений для улучшения производительности соединения.
  • Первичные и уникальные ключи автоматически имеют индексы, но Вы могли бы хотеть создать индекс на внешнем ключе; см. Главу 6, "Поддержав Целостность данных в Разработке приложений" для получения дополнительной информации.
  • таблицы Small не требуют индексов; если запрос занимает слишком много времени, то таблица, возможно, выросла от малого и большого.

столбцы Some являются сильными кандидатами на индексацию. Столбцы с одним или несколькими следующих характеристик являются хорошими кандидатами на индексацию:

  • Значения уникальны в столбце, или существует немного дубликатов.
  • существует широкий спектр значений (хорош для регулярных индексов).
  • существует маленький диапазон значений (хорош для растровых индексов).
  • столбец содержит много пустых указателей, но часто запрашивает выбор все строки, имеющие значение. В этом случае, сравнение, которое соответствует всем ненулевым значениям, таким как:

    , ГДЕ COL_X> =-9.99 *питание (10,125) предпочтительно ТУДА, ГДЕ COL_X ЯВЛЯЕТСЯ NOT NULL

    , Это вызвано тем, что первое использование индекс на COL_X (предполагающий, что COL_X является числовым столбцом).

Столбцы со следующими характеристиками менее подходят для индексации:

  • существует много пустых указателей в столбце, и Вы не ищете на ненулевых значениях.
4
ответ дан DCookie 27 November 2019 в 23:29
поделиться

Ничего себе, это - просто такая огромная тема, трудно ответить в этом формате. Я, которого srtongly рекомендуют этому книжный .

Индексный Дизайн Реляционной базы данных и Оптимизаторы Tapio Lahdenmaki

, Вы только используете индексы для создания доступа таблицы быстрее, иногда Вы делаете индексы для предотвращения доступа таблицы в целом. Что-то не упомянутое все же, но жизненно важный.

существует целая наука к этому, если Вы действительно хотите заставить свою базу данных работать максимально.

А-ч, одна определенная оптимизация к Oracle создает обратные ключевые индексы. Если у Вас есть индекс PK одноатомно увеличивающей стоимости, как последовательность, и Вы имеете очень параллельные вставки и не планируете расположиться сканирование, что столбец тогда делает его обратным ключевым индексом.

Видят, насколько конкретный эта оптимизация может быть?

2
ответ дан 27 November 2019 в 23:29
поделиться

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

-Adam

1
ответ дан Adam Davis 27 November 2019 в 23:29
поделиться

Обычно каждый помещает столбцы ID впереди, и те обычно определяют строки исключительно. Комбинация столбцов может также сделать то же самое. Поскольку пример с помощью автомобилей... отмечает, или номерные знаки уникальны и имеют право на индекс. Они (столбец тегов) могут иметь право на первичный ключ. Имя владельцев может иметь право на индекс, если Вы собираетесь искать на имени. марка автомобиля действительно не должна получать индекс в начале, поскольку это не собирается варьироваться слишком много. Индексы не помогают, если данные в столбце не варьируются слишком много.

Смотрят на SQL - что где пункты, смотрящие на. Тем, возможно, понадобится индекс.

Мера. Какова проблема - занимающие слишком много времени страницы/запросы? что используется для запросов. Создайте индекс на тех столбцах.

Протесты: для индексов нужно время для обновлений и пространства.

и иногда полные сканирования таблицы более быстры, чем индекс. маленькие таблицы могут быть просканированы более быстрые, чем получение индекса и затем удар таблицы. Посмотрите на свои соединения.

0
ответ дан jim 27 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

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