Лучшие практики и антишаблоны в создании индексов в SQL Server?

Вы можете добавить это в свой файл JavaScript, чтобы разрешить ваши «массивы»:

Array.prototype.clear = function() {
    this.splice(0, this.length);
};

Затем вы можете использовать его следующим образом:

var list = [1, 2, 3];
list.clear();

Или если вы хотите убедиться, что вы ничего не уничтожаете:

if (!Array.prototype.clear) {
    Array.prototype.clear = function() {
       this.splice(0, this.length);
    };
}

Многие думают, что вы не должны изменять собственные объекты (например, Array), и я склонен согласиться. Будьте осторожны при принятии решения о том, как с этим справиться.

17
задан Buu Nguyen 20 January 2009 в 15:26
поделиться

8 ответов

Индекс является в основном "шпаргалкой". Это позволяет DBMS находить конкретное значение (или диапазон значений) на диске, не имея необходимость сканировать целую таблицу. Обычно Вы платите определенный штраф на ВСТАВКЕ / ОБНОВЛЕНИЕ / УДАЛЯЕТ при наличии индекса, но редко так, что это - узкое место самостоятельно. Хороший DBMS будет только использовать индексы, когда они помогут производительности запросов, таким образом, нет большого количества чрезвычайно отрицательных антишаблонов здесь; Вам очень обычно не причиняет боль, если у Вас есть дополнительные индексы (если Вы не говорите об очень очень транзакционных таблицах). Тем не менее тщательная индексация через плату поможет Вам удостовериться, что действительно важные - там, и лучший способ обнаружить, что это путем профилирования приложения.

ключ к пониманию, когда и если не использовать индексы должен надеть схватывание, что они действительно делают под покрытиями. Короче говоря Вы хотите их, когда селективность индекса высока (т.е. количество различных возможных значений высоко по сравнению с размером отношения). Так, например, если у Вас есть таблица с 10 000 строк, и у Вас есть столбец, названный "цветом" на той таблице, это или "красно" или "сине", это не помогает многому иметь индекс, потому что DBMS должен будет, вероятно, загрузить большинство страниц в память так или иначе (принимающий случайное распределение). С другой стороны индекс на идентификаторе первичного ключа таблицы (который почти всегда автоматически добавляется) сделает поиски в той таблице, светящейся быстро - на порядке журнала (n) - потому что очень небольшое количество узлов в дереве должно быть исследовано для нахождения страницы на диске, где запись находится.

Индексы в большинстве современных систем баз данных реализованы с B + дерево, которое является очень прохладным вариантом B-деревьев, это оптимизировано для медленной внешней памяти (диски вместо памяти). Можно получить хорошее введение в их использование и функциональность от Системы баз данных: Полная Книга .

13
ответ дан 30 November 2019 в 13:13
поделиться

Не тестируйте индексы или оптимизируйте запросы без базы данных, заполненной представительными данными.

база данных будет обычно игнорировать любой индекс на булевом поле. Это проигнорирует его как часть сводного индекса. (Однако см. "фильтрованный индекс" в SQL Server 2008.)

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

ничего не принимают. Протестируйте все.

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

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

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

4
ответ дан 30 November 2019 в 13:13
поделиться

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

2
ответ дан 30 November 2019 в 13:13
поделиться

Вот пара большего количества антишаблонов индексации, которые я видел или был виновен в:

Общее покрытие - Помещающие индексы на таблицах с минимальным ростом и (очень) низким rowcount. Это контрпродуктивно, поскольку индексный поиск может занять больше времени, чем сканирование таблицы.

Промышленная Сила, Индексирующая - Размещение индекса на столбце первичного ключа. Меня попросили сделать это для "ускорения" запроса.

2
ответ дан 30 November 2019 в 13:13
поделиться

Рассмотрите чтение Индексный Дизайн Реляционной базы данных и Оптимизаторы . Это даст Вам много идей и причин, почему они хороши.

1
ответ дан 30 November 2019 в 13:13
поделиться

Помещение кластерного индекса на столбце GUID является главным образом не хорошей идеей. Кластерный индекс определяет физический порядок того, как данные хранятся. Поэтому лучше помещать кластерный индекс на столбец, который увеличивает или постепенно уменьшается, и который уникален.
(Если Кластерный индекс не уникален, SQL Server добавит PK внутренне к кластерному индексу). Гуид является случайным значением (если Вы не удостоверяетесь, что используете последовательный гуид), таким образом, это означает, что каждый раз Вы вставляете или обновляете гуид в столбце, который является частью кластерного индекса, SQL-сервер должен будет переместить записи в страницах данных.

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

1
ответ дан 30 November 2019 в 13:13
поделиться

Одна вещь, что я нашел, что люди забывают делать, когда индексация является индексом внешний ключ. Индексы первичного ключа создаются автоматически (я говорю SQL Server ее, другие базы данных могут варьироваться), но внешние ключи не. Но многие люди предполагают, что они (по-видимому, те же люди, которые предполагают, что триггеры будут действовать только на одну запись за один раз). Так как они почти всегда вовлекаются в соединения (Почему еще у Вас был бы тот?), они должны быть индексированы большую часть времени (Исключением была бы действительно маленькая таблица).

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

1
ответ дан 30 November 2019 в 13:13
поделиться

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

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

Погрузка книга по T-SQL, Запрашивающему Itzik Ben-Gan (Нажатие MS) в следующий раз, когда Вы находитесь в книжном магазине (У них будет он). Прочитайте первые 3 главы, и это покроет, как процесс запроса работает в SQL Server - до Вашей работы с этой конкретной технологией, они могут оказаться самыми важными 3 главами, которые Вы будете когда-либо читать.

1
ответ дан 30 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

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