![]() |
#1 |
Участник
|
Этому вопросу посвящена новая техническая возможность, появляющаяся после установки соответствующего платформенного обновления.
Подробно описано: http://blogs.msdn.com/b/nav/archive/...ort-usage.aspx Решил воспользоваться этим блог постом, а так же советами из комментариев (поле GUID и COMMIT). P.S. Теория использования GUID поля для снижения зоны потенциальной блокировки: http://dynamicsuser.net/blogs/stryk/...ql-server.aspx Картинки: ![]() ![]() ![]() ![]() ![]() Подробнее... http://blogs.technet.com/b/alexef/ar...reportlog.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
![]() |
#2 |
Участник
|
Производительность GUID
Шон МакКоун (Sean McCown) Все чаще и чаще я сталкиваюсь с тем, что разработчики по какимто причинам хотят использовать идентификаторы GUID в качестве первичных ключей, и, что еще хуже, в кластеризованных индексах. Никак не возьму в толк, зачем надо применять GUID. Вопервых, они огромного размера — раза в четыре больше, чем целое, используемое в качестве первичного ключа. Приведем основные причины, по которым НЕ следует пользоваться GUID. · Они слишком большие, чтобы стать эффективным индексом. Чем меньше индекс, тем лучше, — это позволяет быстро найти значение ключа. Ни при каких условиях 16байтный индекс не сравнится с 4байтным. · Их слишком трудно запоминать администраторам баз данных, и потому сложно вникать в вопросы с данными. · Они не гарантируют уникальность. Вероятность того, что значение GUID будет уникальным, весьма велика, но это не 100%. · Они слишком быстро приводят к фрагментации таблицы. Поскольку они совершенно случайны, нельзя знать заранее, где произойдет следующая вставка, поэтому кластеризация по этому ключу НЕПРЕМЕННО вызовет фрагментацию. Поэтому не позволяйте своим разработчикам использовать GUID, особенно в системах, которые вам самим придется сопровождать. Проблема состоит в том, что ничего нельзя менять без твердых цифр и никто не проводил тестирования такого рода вещей. А вот я протестировал! Разница в производительности потрясает. Конечно, найдутся разработчики, которые все же будут настаивать на применении этих идентификаторов, но пусть стараются. Однако одно несомненно — ничего нельзя менять без обоснования в виде реальных цифр. Но теперь вы можете пойти к ним и показать, почему в базах данных лучше обойтись без GUID. Заключение У идентификаторов GUID есть своя ниша, но она, разумеется, не расположена рядом с кластеризованными индексами. Если вам все же приходится хранить GUID, создайте для него столбец гденибудь в конце таблицы, а кластеризованный индекс стройте по ID, а не по нему. Тогда вы сможете обращаться с запросом к нужному GUID, а затем взять соответствующий ему ID и выполнять все, кроме первоначального поиска, по этому маленькому полю ID. Помоему, очень забавно, что разработчики получают требование уникальности, — их мозг попадает в заложники к GUID. Им в голову не приходит ничего иного. Один раз меня даже назвал идиотом один программист, который считал, что логические требования — это самый важный аспект приложения и что учитывать в приложении соображения производительности — кратчайший путь к провалу. Попробуйтека воспользоваться этой логикой и запустите 500 или 1000 одновременно работающих пользователей. А когда ваше приложение встанет, позвоните своему заказчику и скажите ему, что производительность приложения не такая уж важная штука. |
|
![]() |
#3 |
Участник
|
Ну и тесты (англ.) http://www.sql-server-performance.co...d-performance/
выборка и вставка записей хуже в разы |
|
![]() |
#4 |
Участник
|
Мои 5 копеек -
В статье, где тесты пишут: "Recently, I was asked my opinion on a database design schema our company developers were working on. When I heard they were using GUID’s (Global Unique Identifier) as PK’s (primary keys), my jaw about dropped." В данном случае No. - Primary Key. UID - не Primary Key. По остальному спорить не буду. Не силен в практической теме. |
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от finn
![]() Мои 5 копеек -
В статье, где тесты пишут: "Recently, I was asked my opinion on a database design schema our company developers were working on. When I heard they were using GUID’s (Global Unique Identifier) as PK’s (primary keys), my jaw about dropped." В данном случае No. - Primary Key. UID - не Primary Key. По остальному спорить не буду. Не силен в практической теме. |
|