В каких случаях использовать autoincrement ID а в каких GUID?

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

1 ответов


Речь только о базах данных? Много разных критериев ... Нужно решить, что более важно в вашем проекте и исходя из этого выбирать тип данных.

Плюсы Autoincrement:
- Более читабельное значение идентификатора - проще использовать в запросах, выполняемых вручную (при отладке приложения, например)
- Компактная запись, меньше места на диске

Минусы Autoincrement
- На распределенных системах требуется дополнительная настройка базы данных (стартовые значения последовательности, шаг) для предотвращения пересечения значений
- На большинстве серверов требуется выполнение отдельной команды для получения значения идентификатора вставленной записи

Плюсы GUID:
- Не требуется получение значения ключа из базы данных после вставки записи
- Не требуется настройка базы данных в распределенных системах
- Проще импорт записей из внешних источников (гарантированно не будет пересечения ключей даже при использовании разветвленной структуры данных)

Минусы GUID:
- Не все серверы поддерживают тип данных GUID, можно хранить в виде строк, но операции над записями будут выполняться гораздо медленнее
- Сложно использовать при отладке

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

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


Для себя я делаю такой вывод: В больших распределенных системах лучше использовать GUID, в локальных Autoincrement. Autoincrement в процессе разработки мне нравится гораздо больше - проще отлаживать запросы :)