Производительность SQL; Вставка, выбор и обновление - PullRequest
2 голосов
/ 22 июля 2011

У меня есть операция SQL вставки.У меня есть еще одна операция, выбор SQL и обновление.Размер стола составляет 300K-1 млн.Если я добавлю индекс, значит ли это, что моя вставка и обновление будут замедлены и выбор будет быстрее?Но, как правило, чем быстрее будет работать select, тем медленнее будут вставка и обновление?Как правило, с записями 300K-1Million общая производительность будет улучшена или нет?

Ответы [ 4 ]

2 голосов
/ 22 июля 2011

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

Не можете ли вы создать тестовый пример с индексом и без индекса?

1 голос
/ 22 июля 2011

Если бы только жизнь была такой простой, ответ, как всегда, есть; это зависит.

Представьте, что ваш стол - ваша собственная "маленькая черная книга" людей, которые вам нравятся. На каждой странице есть разные люди name, address, date of birth и т. Д. (Книга = Таблица, Страница = Запись)

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

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

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

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

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

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


Короче ...
1. Индекс может помочь определенным видам Выберите производительность
2. Всегда добавляет стоимость вставки
3. Это может ускорить поиск записи для обновления
4. Но также можно добавить накладные расходы на обновления в индексированных полях

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

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

1 голос
/ 22 июля 2011

Индексы ТРЕБУЮТСЯ для достижения приемлемой производительности при выборках, когда таблица содержит столько строк, сколько в вашем сценарии. Издержки индекса, которые замедляют вставки и обновления, заметны только при больших пакетных вставках / обновлениях; влияние издержек индекса на изолированные транзакции вставки / обновления незначительно.

1 голос
/ 22 июля 2011

Это зависит от типа индекса, который вы собираетесь создать.

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

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

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