У нас есть устаревшая база данных, которая является SQL-сервером db (2005 и 2008).База данных сервера Sql для кластеризованного индекса или нет
Все первичные ключи в таблицах - это UniqueIdentifiers.
Таблицы в настоящее время не имеют кластерного индекса, созданного на них, и мы сталкиваемся с проблемами производительности в таблицах с рекордными записями 750 тыс. Это первая база данных, с которой я работал с уникальными идентификаторами в качестве единственного первичного ключа, и я никогда не видел, чтобы сервер SQL был медленным с возвратом данных.
Я не хочу создавать кластеризованный индекс в уникальном идентификаторе, поскольку они не являются последовательными и поэтому замедляют приложения вниз, когда дело доходит до вставки данных.
Мы не можем удалить уникальный идентификатор, который используется для целей управления идентификацией удаленного сайта.
Я подумал о добавлении большого целого идентификационного столбца в таблицы и создании кластерного индекса в этом столбце и включая уникальный столбец идентификатора.
т.е.
INT идентичность - Первая колонка для поддержания скорости вставки уникальный идентификатор - Для того, чтобы обеспечить приложение продолжает работать, как ожидалось.
Цель состоит в том, чтобы улучшить запрос идентификации и объединить производительность таблицы.
Q1: Будет ли это улучшать производительность запроса в db или замедлит его?
Q2: Есть ли альтернатива этому, которого я не перечислял?
Благодаря Пита
Edit: Производительность вопросы по получению данных быстро через оператор выбора, особенно если некоторые из более «транзакционного/изменений» таблицы соединяются вместе.
Редактирование 2: Соединения между таблицами обычно заключаются между основным ключом и внешними ключами, для таблиц с внешними ключами они включены в некластеризованный индекс, чтобы обеспечить более индекс покрытия.
В таблицах нет других значений, которые бы обеспечивали хороший сгруппированный индекс.
Я склоняюсь больше к добавлению дополнительного столбца идентификации в каждую из таблиц высокой нагрузки, а затем включает текущий столбец Guid PK в кластерном индексе, чтобы обеспечить лучшую производительность запросов.
Редактирование 3: Я бы оценил, что 80% запросов выполняются только на первичных и внешних ключах через механизм доступа к данным. Как правило, наша модель данных имеет ленивые загружаемые объекты, которые выполняют запрос при обращении, эти запросы используют идентификатор объектов и столбец PK. У нас есть большое количество запросов на исключение/включение данных, управляемых пользователем, которые используют столбцы внешнего ключа в качестве фильтра, основанного на критериях для типа X, исключают следующие идентификаторы. Оставшиеся 20% - это те, где указаны столбцы Enum (int) или диапазона дат, в системе выполняется очень мало текстовых запросов.
По возможности я уже добавил индексы покрытия для покрытия самых тяжелых запросов, но пока я все еще разочарован производительностью. Как говорит синий, данные хранятся как куча.
У вас в настоящее время есть некластеризованный индекс для уникальных идентификаторов? – jwsample
Да, у нас есть некластеризованные индексы для уникальных идентификаторов. – Peter
Поскольку у вас есть хотя бы один индекс в этом столбце, вы уже несете штраф за производительность вставки. В зависимости от структуры таблицы вы можете просто удалить некластеризованный индекс и переключиться в кластеризованное с небольшим воздействием на то, что вы сейчас видите. – jwsample