sql - 引导为PK低性能

标签 sql sql-server tsql

我正面临这个问题:我有一个大约有 10K 行的数据库和一个 GUID 作为表的 PK。当我从数据库中进行一些选择时,与 int 自动增量 PK 相比,响应“慢”。

我需要GUID能够保证给我的伪随 secret 钥。

所以,我想知道如果在数据库上使用新的 BIGINT KEY 作为 PRIMARY KEY 和带有索引的 guid 列(真的需要 GUID 列上的索引吗?),我的性能会比现在更好。

谢谢

最佳答案

GUID 数据类型很可能是主键列的最差候选者之一,主要原因有两个。

  1. 这是一个随机值,列值是随机的意味着 SQL Server 必须在现有行之间的某处插入新行,这会导致大量页面拆分和碎片化索引。

  2. 它是一个 16 字节的数据,比整数数据类型大 4 倍,这意味着如果处理整数值,SQL Server 将处理 4 倍多的数据来执行相同的操作。

  3. GUID 的唯一好处是,它是唯一的,但是为拥有 GUID 列付出的代价真的值得吗?我会让你决定这个:)

坚持使用 Integer 作为您的主键列,使其成为自动生成值的标识。

关于sql - 引导为PK低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30027368/

相关文章:

sql - 如何提高 Postgres select 语句的速度?

sql - STRING_AGG 不是可识别的内置函数名称

sql - 如何根据日期和类型分组

sql - 如何在没有聚合函数的情况下在sql server中创建枢轴查询

c# - 参数化 SQL 查询

sql - 在链接服务器中使用 Case 语句

sql - 将多个数据库迁移到一个 Azure SQL 数据库?

MySQL - 将特定行设为 NULL 或 max 值,而不仅仅是列

sql-server - 为什么在SQL中使用 "not null primary key"?

sql - 查找行组中的最新日期