Я работаю над базой данных, в которой я получаю идентификатор своей записи после добавления, сохраняя и получая известный идентификатор GUID.Мое приложение работает как на SQL Server, так и на Oracle, поэтому я не могу использовать @@ IDENTITY *.
Скажем, например, я добавляю новый адрес:
ID (identity column in SQL Server;sequenced/trigger column in Oracle)
... address data... (street, town, postcode, etc.)
GUID
Я получаю идентификаторвернемся, выполнив следующее:
1. INSERT INTO ADDRESS (... address details, GUID = {some new GUID value})
2. SELECT ID FROM ADDRESS WHERE GUID = {my GUID value}
3. UPDATE ADDRESS SET GUID = NULL WHERE GUID = {my GUID value}
В первой части я добавляю детали адреса и устанавливаю значение GUID в базе данных;во второй части я получаю обратно свой идентификатор, а в третьей я удаляю значение GUID из базы данных (чтобы избежать маловероятного события дублирования GUID).
Когда я смотрю наПредполагаемый план выполнения SQL Server 2008 для третьего бита, он показывает следующий путь, если у меня нет индекса для столбца GUID:
![Image shows the estimated execution plan where there's no index on the GUID column](https://i.stack.imgur.com/GBSnS.jpg)
и следующий путь, если у меня есть индексв столбце GUID:
![Image shows the estimated execution plan where there's an index on the GUID column](https://i.stack.imgur.com/oMW37.jpg)
Мой вопрос: я понимаю, что сканирование, показанное на первом изображении, не так хорошо, как поиск, показанный на втором изображении, но будетТот факт, что столбец GUID является по существу пустым 99,999% времени, означает, что я не должен индексировать поле, потому что оно будет фрагментировано все время и будет тратить ресурсы?Или же индекс все равно поможет, потому что он легко покажет мне, где мой единственный GUID, который я только что добавил, вместо того, чтобы выполнять его полное сканирование?
В итоге: учитываятот факт, что GUID добавляются, а затем сразу удаляются, есть ли смысл индексировать столбец GUID?
* На самом деле, дизайн не мой, поэтому я не могу использоватьдругой метод;однако вы должны заметить, что структура моей конкретной базы данных не влияет на мой общий вопрос.