Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it better to use an uniqueidentifier(GUID) or a bigint for an identity column?

Tags:

sql-server

For SQL server is it better to use an uniqueidentifier(GUID) or a bigint for an identity column?

like image 735
Aaron Fischer Avatar asked Feb 02 '09 21:02

Aaron Fischer


People also ask

Should I use GUID as id?

If you develop distributed system for documents management and different parts of system in different places all over the world can create some documents. In such case I would use GUID, because it guaranties that 2 documents created in different parts of distributed system wouldn't have same Id.

Is it good to use GUID as primary key?

GUIDs may seem to be a natural choice for your primary key - and if you really must, you could probably argue to use it for the PRIMARY KEY of the table. What I'd strongly recommend not to do is use the GUID column as the clustering key, which SQL Server does by default, unless you specifically tell it not to.

Should I use GUID?

Use guids when you have multiple independent systems or clients generating ID's that need to be unique. For example, if I have 5 client apps creating and inserting transactional data into a table that has a unique constraint on the ID, then use guids.

What is the purpose of the Uniqueidentifier data type?

The uniqueidentifier type is considered a character type for the purposes of conversion from a character expression, and therefore is subject to the truncation rules for converting to a character type.


1 Answers

That depends on what you're doing:

  • If speed is the primary concern then a plain old int is probably big enough.
  • If you really will have more than 2 billion (with a B ;) ) records, then use bigint or a sequential guid.
  • If you need to be able to easily synchronize with records created remotely, then Guid is really great.

Update
Some additional (less-obvious) notes on Guids:

  • They can be hard on indexes, and that cuts to the core of database performance
  • You can use sequential guids to get back some of the indexing performance, but give up some of the randomness used in point two.
  • Guids can be hard to debug by hand (where id='xxx-xxx-xxxxx'), but you get some of that back via sequential guids as well (where id='xxx-xxx' + '123').
  • For the same reason, Guids can make ID-based security attacks more difficult- but not impossible. (You can't just type 'http://example.com?userid=xxxx' and expect to get a result for someone else's account).
like image 53
Joel Coehoorn Avatar answered Sep 24 '22 17:09

Joel Coehoorn