Улучшение производительности кластерного индексного первичного ключа GUID

Вы не можете связывать вызовы с переменными функциями в стиле C. Единственный способ - передать va_list в качестве аргумента. Именно по этой причине необходимо семейство функций v *.

Таким образом, вы пишете свои v * -подобные функции в терминах va_list, а затем , а затем оборачиваете каждую из них в функцию на основе эллипса.

9
задан TheVillageIdiot 24 February 2009 в 18:39
поделиться

6 ответов

Необходимо использовать newsequentialid (), вместо этого см. здесь Некоторый Простой Код Для Показа Различия Между Newid И Newsequentialid

5
ответ дан 4 December 2019 в 06:02
поделиться

Кластерный индекс на GUID не является хорошим дизайном. Самая природа GUID - то, что это случайно, в то время как кластерный индекс физически заказывает записи ключом. Эти две вещи абсолютно противоречат. Для каждой вставки SQL должен переупорядочить записи на диске! Удалите кластеризацию из этого индекса!

Время для использования кластеризации - когда у Вас есть "естественный" порядок к данным: вставленное время, номер аккаунта, и т.д. Для полей времени кластеризация является почти бесплатной. Для номера аккаунта это могло бы быть свободно или дешево (когда номера аккаунта присвоены последовательно).

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

40
ответ дан 4 December 2019 в 06:02
поделиться

Можно попробовать последовательные ГУИДЫ, которые сделают индекс более эффективным. Информация здесь.

2
ответ дан 4 December 2019 в 06:02
поделиться

Избегайте создания кластерного индекса для столбцов с длинными строками. GUID будет состоять из 36 символов. Это снизит производительность запросов, даже если вы создали кластерный индекс. для лучшей практики используйте целочисленные столбцы идентификаторов.

-5
ответ дан 4 December 2019 в 06:02
поделиться

. Вам нужно проанализировать свой запрос. Мы можем только догадываться, почему ваши запросы плохо выполняются, не просматривая план выполнения (который вы можете легко избавиться от SQL Server или Oracle).

Учитывая, что GUID представляет собой 128-битное значение (если хранится в исходном виде), GUID снижает плотность блоков данных и индекса на 50% (в случае индекса первичного ключа), поэтому убедитесь, что GUID Уместно.

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

1
ответ дан 4 December 2019 в 06:02
поделиться

Нет проблем с использованием GUID в качестве первичного ключа. Просто убедитесь, что когда вы фактически устанавливаете GUID в качестве первичного ключа, тогда установите индекс, который он автоматически создает, как некластеризованный. Многие люди забывают (или не знают) сделать это в SQL Server.

НИКОГДА не используйте кластерный индекс для GUID. Это приведет к физическому упорядочиванию GUID на диске, что, очевидно, бессмысленно (как уже указывали другие)

7
ответ дан 4 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

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