Как Вы знаете, каков хороший индекс?

При работе с таблицами в Oracle, как Вы знаете при установке хорошего индекса по сравнению с плохим индексом?

10
задан Xenph Yan 17 September 2008 в 02:25
поделиться

6 ответов

Это зависит от того, под чем Вы подразумеваете 'хороший' и 'плохой'. В основном необходимо понять, что каждый индекс, который Вы добавляете, увеличит производительность на любом поиске на ту колонну (настолько добавляющий индекс к 'lastname' столбцу таблицы человека увеличит производительность на запросах, которые имеют, "где lastname =" в них), но уменьшают производительность записи через целую таблицу.

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

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

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

После этого это - вопрос тестирования загрузки, чтобы видеть, как производительность реагирует при производственных условиях и большой тонкой настройке для нахождения aceeptable баланса.

21
ответ дан 3 December 2019 в 14:54
поделиться

Поля, которые разнообразны, очень конкретны, или уникальные, делают хорошие индексы. Такой как даты и метки времени, уникальные числа постепенного увеличения (наиболее часто используемый как первичные ключи), имена человека, номерные знаки, и т.д...

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

Описательные строки свободной формы во всю длину делают плохие индексы, как, кто бы ни выполняет, запрос редко знает точное значение строки.

Линейно заказанные данные (такие как метки времени или даты) являются наиболее часто используемыми как кластерный индекс, который вынуждает строки быть сохраненными в индексном порядке и позволяет, чтобы доступ, значительно ускоряя запросы диапазона (например, 'дают мне все заказы на покупку между октябрем и декабрем'). В таком случае механизм DB может просто искать на первую запись, указанную диапазоном, и начать читать последовательно, пока это не поражает последний.

7
ответ дан 3 December 2019 в 14:54
поделиться

Корова @Infamous - необходимо думать о первичных ключах, не индексах.

@Xenph Yan - Что-то, что не затронули другие, выбирает какой индекс для создания. Некоторые базы данных действительно не дают Вам большую часть выбора, но у некоторых есть большое множество возможных индексов. B-деревья являются значением по умолчанию, но не всегда лучшим видом индекса. Выбор правильной структуры зависит от вида использования, которое Вы ожидаете иметь. Какие запросы необходимо поддерживать больше всего? Вы находитесь в чтении главным образом или пишете главным образом среду? Ваши записи во власти обновлений, или добавляет? И т.д., и т.д.

Описание различных типов индексов и их за и против доступно здесь: http://20bits.com/2008/05/13/interview-questions-database-indexes/.

3
ответ дан 3 December 2019 в 14:54
поделиться

Вот большая статья SQL Server: http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1.aspx

Хотя механика не будет работать над Oracle, подсказки очень кстати (минус вещь на кластерных индексах, которые не вполне работают тот же путь в Oracle).

2
ответ дан 3 December 2019 в 14:54
поделиться

Хороший индекс - что-то, на что можно полагаться, чтобы быть уникальными для определенной строки таблицы.

Одна наиболее часто используемая индексная схема является использованием чисел, которые увеличивают 1 для каждой строки в таблице. Каждая строка закончит тем, что имела различный индекс числа.

-2
ответ дан 3 December 2019 в 14:54
поделиться

Некоторые эмпирические правила, при попытке улучшить конкретный запрос.

Для конкретной таблицы (где Вы думаете, Oracle должна запуститься) пытаются индексировать каждый из столбцов, используемых в операторе Where. Поместите столбцы с равенством сначала, сопровождаемый столбцами с диапазоном или как.

Например:

WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200

Если столбцы являются очень большими в размере (например, Вы храните некоторый XML или что-то), можно быть более обеспеченным отъездом их из индекса. Это сделает индекс меньшим для сканирования, предполагая, что необходимо перейти к строке таблицы для удовлетворения списка выборки так или иначе.

С другой стороны, если все значения в ИЗБРАННЫХ и операторах Where будут в индексе, то Oracle не должна будет получать доступ к строке таблицы. Таким образом, иногда это - хорошая идея поместить выбранные значения в последний раз в индекс и избежать доступа таблицы все вместе.

Вы могли записать, что книга о лучших способах индексировать - ищет автора Jonathan Lewis.

0
ответ дан 3 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

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