Is it better to use an uniqueidentifier(GUID) or a bigint for an identity column?
sql-server
Solution
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).
Problem
For SQL server is it better to use an uniqueidentifier(GUID) or a bigint for an identity column?