При работе со столами в Oracle, как вы знаете, когда вы создаете хороший индекс против плохого индекса?Откуда вы знаете, что такое хороший индекс?
ответ
Это зависит от того, что вы подразумеваете под «хорошим» и «плохим». В основном вам нужно понять, что каждый добавленный вами индекс повысит производительность при любом поиске по этому столбцу (поэтому добавление индекса в столбец «lastname» таблицы лиц увеличивает производительность при запросах с «где lastname =» в них), но снизить производительность записи по всей таблице.
Причина этого заключается в том, когда вы добавляете или обновить строку, он должен добавить к или обновить и сам, и каждый индекс таблицы, что строка является членом. Поэтому, если у вас есть пять указателей на таблице, каждое добавление должно записываться в шесть мест - пять индексов и таблицу - и обновление может касаться до шести мест в худшем случае.
Создание индекса является балансирующим действием, а затем между скоростью запроса и скоростью записи. В некоторых случаях, таких как датамарт, который загружается только один раз в неделю на ночной задаче, но запрашивается тысячи раз в день, имеет смысл перегрузить индексы и максимально ускорить запросы. В случае систем обработки транзакций онлайн, однако, вы хотите попытаться найти баланс между ними.
Так короче, добавить индексы столбцов, которые используются много в некоторых запросах, но стараются избегать добавления слишком много и поэтому добавить наиболее часто используемые столбцы первой.
После того, что его вопрос нагрузочного тестирования, чтобы увидеть, как производительность реагирует в производственных условиях, и многие настройки, чтобы найти aceeptable баланс.
Вот большая статья SQL Server: http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1.aspx
Хотя механика не будет работать на Oracle, советы очень кстати (минус вещь на кластерные индексы, которые не совсем работают точно так же в Oracle).
Хороший показатель является то, что вы можете рассчитывать на быть уникальным для конкретной строки таблицы.
Один из часто используется схема индекса является использование чисел, которые увеличиваются на 1 для каждой строки в таблице. Каждая строка будет иметь другой индекс числа.
Поля, которые отличаются друг от друга, отличаются спецификой или уникальностью, делают хорошие индексы. Например, даты и временные метки, уникальные инкрементные числа (обычно используемые в качестве первичных ключей), имена людей, номера номерных знаков и т. Д.
Контрпример будет гендерным - существует только два общих значения, поэтому индекс doesn ' t действительно помогает уменьшить количество строк, которые необходимо отсканировать.
Полноразмерные описательные строки в свободной форме сделать плохие показатели, как и тот, кто выполняет запрос редко знает точное значение строки.
Линейно упорядоченные данные (такие как временные метки или даты) обычно используются в качестве кластеризованного индекса, что заставляет строки сохраняться в порядке индекса и позволяет осуществлять доступ по заказу, значительно ускоряя запросы диапазона (например, «дайте мне все заказы на продажу в период с октября по декабрь). В таком случае механизм БД может просто искать первую запись, указанную диапазоном, и начинать читать последовательно до тех пор, пока не достигнет последней.
@Infamous Cow - вы должны думать о первичных ключах, а не о индексах.
@Xenph Yan - Что-то еще не затронуло выбор вида от индекса для создания. Некоторые базы данных не дают вам большого выбора, но некоторые из них имеют большое количество возможных индексов. B-деревья - это по умолчанию, но не всегда лучший вид индекса. Выбор правильной структуры зависит от вида использования, которое вы ожидаете. Какие запросы вам нужны для поддержки большинства? Вы находитесь в среде с чтением или большей частью записи? Являются ли ваши записи доминирующими в обновлениях или добавлениях? Etc и т. Д.
Описание различных типов индексов и их плюсы и минусы можно найти здесь: http://20bits.com/2008/05/13/interview-questions-database-indexes/.
Не стесняйтесь компилировать информацию об этом и добавлять его в мой связанный пост по индексированию базы данных. – 2008-09-18 04:01:02
Некоторые правила большого пальца, если вы пытаетесь улучшить конкретный запрос.
Для конкретной таблицы (где, по вашему мнению, следует начинать Oracle) попробуйте индексировать каждый из столбцов, используемых в предложении WHERE. Сначала поместите столбцы с равенством, а затем столбцы с диапазоном или как.
Например:
WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200
Если колонки очень большого размера (например, вы храните некоторые XML или что-то) вы можете быть лучше оставить их из индекса. Это сделает индекс меньше для сканирования, предполагая, что вам нужно идти в строку таблицы, чтобы в любом случае удовлетворить список выбора.
В качестве альтернативы, если все значения в предложениях SELECT и WHERE в индексе Oracle не нуждаются в доступе к строке таблицы. Поэтому иногда рекомендуется помещать выбранные значения в индекс и избегать доступа к таблице.
Вы можете написать книгу о лучших способах индексации - искать автора Джонатан Льюис.
- 1. Константы. Откуда вы знаете, что такое константа?
- 2. Откуда вы знаете, что вы «внутри» набора треугольников?
- 3. Откуда вы знаете местоположение в пикселях
- 4. iOS - Откуда вы знаете, что устройство что-то играет?
- 5. PUM - Вы знаете, что это такое?
- 6. Как вы знаете, что такое главный запуск?
- 7. Откуда вы знаете, доверено ли CA?
- 8. Откуда вы знаете, когда закрыть проект?
- 9. Откуда вы знаете, какое отношение использовать?
- 10. Откуда вы знаете, когда скрипт PowerShell закончен?
- 11. Откуда вы знаете, что было загружено в среду REPL clojure?
- 12. Откуда вы знаете, что представляет собой текущий объект?
- 13. Откуда вы знаете, кто зависит от проекта?
- 14. Откуда вы знаете, когда использовать шаблоны дизайна?
- 15. Откуда вы знаете, если документ готов
- 16. Знаете ли вы, что хороший пример F # и C# interop?
- 17. Знаете ли вы хороший и эффективный БПФ?
- 18. Знаете ли вы, какой хороший образец UML?
- 19. Откуда вы знаете, что что-то находится в массиве или нет в python?
- 20. Знаете ли вы, что вы делаете?
- 21. Что вы знаете о скриптах avaloq?
- 22. Что такое хороший компилятор Tcl
- 23. Откуда вы знаете, какая кодировка пользователя вводит в браузер?
- 24. Откуда вы знаете, установлен ли Tomcat Server на вашем ПК
- 25. Откуда вы знаете, какие методы использовать для задачи?
- 26. Откуда вы знаете, сколько места выделяется с помощью malloc()?
- 27. Откуда вы знаете, когда возвращать false из функции jQuery?
- 28. Откуда вы знаете, когда бросать элемент в swift?
- 29. Откуда вы знаете, какой драгоценный камень является правильным?
- 30. Откуда вы знаете, когда переменная/свойство было закрыто?
См. Также https://stackoverflow.com/questions/107132/what-columns-generally-make-good-indexes/. – fdelia 2018-01-26 06:52:16