Bigint 和 SQL Server 性能

And*_*ngo 3 performance sql-server query-performance

我继承了一个数据库,其中许多表都将 bigint 作为许多字段的数据类型,当您看到内容时,它并不需要 bigint 提供的所有空间。对于不需要的字段使用bigint会影响数据库性能吗?

Jos*_*ell 5

使用bigint“compare”int至少有以下潜在的性能缺陷:

  • 数据将使用磁盘上的更多页面
    • 这会影响当数据不在 RAM 中时从磁盘读取数据所需的时间
    • 它还将使涉及这些字段的任何维护操作花费更长的时间(备份、索引重建、CHECKDB)
  • 这些数据页将占用更多的 RAM 空间
    • 这意味着您要么需要购买更多 RAM,要么会产生更频繁地从磁盘读取数据的成本
  • 包含这些列的内存授予将会更大
    • 这会影响消耗内存的查询计划运算符,例如排序和散列数据
    • 作为次要影响,这会降低并发性

话虽这么说,这些东西对你有多大的实际影响很大程度上取决于你的具体环境和工作量。

注意:可以通过使用行压缩来缓解磁盘和 RAM 使用率问题的增加,但代价是 CPU 使用率增加。由于服务器的 CPU 开销通常比 RAM 更多,因此这通常是一个很好的权衡(感谢Andy 的提醒!)