Guid vs INT - Which One is better as a primary key?

3.0K    Asked by CamelliaKleiber in Salesforce , Asked on Apr 16, 2021

I've been exploring reasons to use or not Guid and int.

int is smaller, faster, easy to remember, keeps a chronological sequence. And as for Guid, the only advantage I found is that it is unique. In which case using sql server guid would be better than and int and why?

From what I've seen, int has no flaws except by the number limit, which in many cases are irrelevant.

What is sql server guid? Why exactly was Guid created? I actually think it has a purpose other than serving as primary key of a simple table. (Any example of a real application using Guid for something?)

Answered by Caroline Brown

GUID is a 16 byte binary SQL Server data type that is globally unique across tables, databases, and servers. The term GUID stands for Globally Unique Identifier and it is used interchangeably with UNIQUEIDENTIFIER.

If talk about int, "int has no flaws except by the number limit, which in many cases are irrelevant.": actually, within this context of INT vs GUID, the upper limit of a signed, 32-bit INT is entirely irrelevant given that the upper limit of a signed, 64-bit BIGINT is well beyond nearly all uses (even more so if you start numbering at the lower limit; and same goes for INT) and it is still half the size of a GUID (8 bytes instead of 16) and sequential.

Here we have listed SQL Server Guid Pros & Cons:

GUID Pros

  • Unique across every table, every database and every server
  • Allows easy merging of records from different databases
  • Allows easy distribution of databases across multiple servers
  • You can generate IDs anywhere, instead of having to roundtrip to the database, unless partial sequentiality is needed (i.e. with newsequentialid())
  • Most replication scenarios require GUID columns anyway


GUID Cons

It is a whopping 4 times larger than the traditional 4-byte index value; this can have serious performance and storage implications if you're not careful

  Cumbersome to debug (where userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}')

The generated GUIDs should be partially sequential for best performance (eg, newsequentialid() on SQL Server 2005+) and to enable use of clustered indexes

If you are certain about performance and you are not planning to replicate or merge records, then use int, and set it auto increment (identity seed in SQL Server).










Your Answer

Answer (1)

Choosing between a GUID (Globally Unique Identifier) and an INT (integer) as a primary key depends on various factors such as performance, scalability, and use case requirements. Here’s a comparison to help decide which one might be better for your scenario:

INT as a Primary Key

Advantages:

Performance: INT keys are generally faster to index and query. They are smaller in size (4 bytes), which means less storage and faster retrieval.

Sequential: INT keys are usually sequential, leading to less fragmentation in indexes and potentially better performance for operations like INSERTs and SELECTs.

Simplicity: Easier to manage and read. Incremental values are straightforward to work with.

Disadvantages:

Scalability: There is a limit to the number of unique values (2,147,483,647 for a standard INT). While this is usually sufficient, it might be a constraint for very large datasets.

Predictability: INT keys are predictable and sequential, which can be a security concern if keys are exposed (e.g., in URLs).

GUID as a Primary Key

Advantages:

Uniqueness: GUIDs are globally unique, which is beneficial when merging records from different databases or systems.

Scalability: With 128 bits (16 bytes), GUIDs provide an extremely large number of unique values, effectively limitless for most applications.

Distributed Systems: Useful in distributed environments where unique keys are required across different systems without coordination.

Disadvantages:

Performance: GUIDs are larger (16 bytes) and random, which can lead to slower indexing and querying performance. They can cause fragmentation and negatively impact performance, especially for INSERT operations.

Complexity: Harder to read and manage due to their length and randomness.

Use Cases

Use INT if:

You have a single, centralized database.

Performance is a critical factor.

The number of records will stay within the limits of an INT.

Sequential IDs are acceptable and there are no concerns about predictability.

Use GUID if:

You need to ensure uniqueness across multiple databases or systems.

You are working with distributed systems or require decentralized key generation.

The size and performance trade-offs are acceptable for your application.

Conclusion

INT is generally preferred for its performance and simplicity in most traditional database scenarios. GUIDs are better suited for distributed systems where global uniqueness is essential. The choice depends on your specific needs and the trade-offs you are willing to make regarding performance, complexity, and scalability.








2 Months

Interviews

Parent Categories