Насколько важна индексация и кластерная индексация для производительности базы данных? - PullRequest
3 голосов
/ 31 декабря 2008

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

Редактировать: Какой тип полей лучше всего смотреть при добавлении кластерного индекса при первом запуске?

Ответы [ 7 ]

10 голосов
/ 31 декабря 2008

Очень очень A ( G , G ) важно . На мой взгляд, разумная индексация - это самое важное в оптимизации производительности БД.

Это не простая тема, которую можно охватить одним ответом. Хорошая индексация требует знания запросов, которые будут выполняться в базе данных, внесения большого числа компромиссов и понимания значения конкретного индекса в конкретном механизме БД. Но это все же очень важно.

РЕДАКТИРОВАТЬ: Как правило, кластерные индексы обычно должны иметь короткую длину. Они должны быть созданы на запросах, которые отражают диапазон. Они не должны иметь повторяющихся записей. Но эти рекомендации очень общие и ни в коем случае не правильные. Правильно будет проанализировать запросы, которые будут выполнены. Тщательно проверяйте и анализируйте планы выполнения и понимайте, как это лучше всего сделать. Это требует многолетнего опыта и знаний, и это ни в коем случае не объясняется в одном параграфе. Это основная вещь, которая делает экспертов БД экспертом (это не единственная вещь, но она примитивна для других важных вещей, таких как проблемы параллелизма, доступность, ...)!

2 голосов
/ 31 декабря 2008

Индексирование: чрезвычайно важно. Неправильные индексы усложняют запросы, иногда до такой степени, что они не могут быть выполнены за разумное время.

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

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

1 голос
/ 31 декабря 2008

Как сказали другие ответы, индексация имеет решающее значение.

Как видно из других ответов, кластерная индексация гораздо менее важна.

Достойная индексация дает вам прирост производительности первого порядка - порядки величины являются общими.

Кластерная индексация - это повышение производительности второго порядка или прироста - обычно дает небольшой (<100%) процент увеличения производительности. </p>

(Мы также сталкиваемся с вопросами «что такое повышение производительности на 100%»; я интерпретирую процент как ((oldtime - newtime) / newtime) * 100, поэтому, если старое время составляет 10 секунд, а новое время 5 секунд, прирост производительности 100%.)

Разные СУБД по-разному интерпретируют значение кластерного индекса. Осторожно. В частности, некоторые СУБД кластеризуют данные один раз, и после этого кластеризация со временем затухает до повторной кластеризации данных. Я полагаю, что другие более активно рассматривают кластеризацию.

1 голос
/ 31 декабря 2008

Индексирование жизненно важно .

Правильный индекс для запроса может значительно повысить производительность, и может показаться, что witchcraft .

1 голос
/ 31 декабря 2008

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

1 голос
/ 31 декабря 2008

Без надлежащих индексов вы заставляете СУБД выполнять сканирование таблиц для запроса чего-либо. Ужасно неэффективно.

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

0 голосов
/ 31 декабря 2008

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

Вполне возможно, что в действительности это не так, однако при использовании кластерных индексов в любом случае обычно вы получаете следующие бонусы за производительность:

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

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

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

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

Не рассчитывайте на № 3 и особенно на № 4. # 1 и # 2 - это обычно безопасные ставки на большинстве платформ СУБД.

...