gpt4 book ai didi

sql-server - 选择 SQL Server 数据类型以获得最大速度

转载 作者:行者123 更新时间:2023-12-01 04:04:37 24 4
gpt4 key购买 nike

我正在设计一个需要优化以获得最大速度的数据库。

所有的数据库数据都是从我称之为输入数据库的东西中生成的(其中包含我正在编辑的数据,主要是谷歌地图的一些折线、标记等)。

所以数据库不需要编辑,但它需要尽可能多地保存数据,以便快速向用户显示结果(穿过城镇的路线、自定义折线等)。

问题是:选择较小的数据类型,例如 smallint 而不是 int 会提高性能还是会影响性能?空间不是问题,经过一些快速计算,数据库不会超过 200mb,不会有超过 100.000 行的表(平均在 5.000 左右)。

我问这个是因为我在互联网上阅读了一些文章,有些人说较小的数据类型可以提高性能,另一些人说它会影响它,因为必须进行额外的处理。我知道,对于较小的数据库,结果可能并不明显,但我对每一点都很感兴趣,因为我期待许多请求会触发更多查询。

托管环境将是带有 SQL Server 2008 R2 的 Windows Server 2008 R2。

编辑 1:只是给你一个例子,因为我还没有合适的表结构:
我将有一张 table ,它将容纳公共(public)交通线路(大约 200 条),由现实生活中的唯一编号标识,并且将在各种表格中被引用,并且各种操作都将在其上进行被制造。这些引用表将保存最大量的数据。

因为线条有唯一的编号,所以我想到了 3 个设计示例:

  • PK 是数据类型的行号:smallint
  • PK 是数据类型的行号:int
  • PK 有所不同(例如身份),行号存储在不同的字段中。
  • 只是为了争论,因为我在不进行优化的“输入数据库”上使用了它,所以 PK 是一个 GUID(16 字节);如果你愿意,你可以比较一下这个和其他的相比有多糟糕,如果真的是

  • 所以请记住,PK 将在至少 15 个表中被引用,其中一些将有超过 50.000 行(其余的平均为 5.000,如上所述),这些行将受到不断的查询和操作,我我对我能得到的每一点速度都很感兴趣。

    如果您需要,我可以更详细地说明这一点。谢谢

    编辑 2:我想到了另一个与此相关的问题,认为它适合这个讨论:

    我会看到任何性能改进吗 在这种特定情况下如果我从我的 .NET 应用程序内部使用 native SQL 查询而不是使用 LINQ to SQL?我知道 LINQ 进行了高度优化,并且在性能方面产生了非常好的查询,但仍然值得一问。再次感谢。

    最佳答案

    你能指出一些文章说更小的数据类型 = 更多的处理吗?请记住,即使使用 SSD,今天的大多数工作负载也是 I/O 绑定(bind)(或内存绑定(bind))而不是 CPU 绑定(bind)。
    特别是在要在许多表中引用 PK 的情况下,使用可能的最小数据类型将是有益的。在这种情况下,如果那是 SMALLINT那么这就是我要使用的(虽然你说大约有 200 个值,所以理论上你可以使用 TINYINT,它是大小的一半并支持 0-255)。如果您不能 100% 确定总会有大约 200 个值,那么您需要谨慎行事。一旦您需要 256,您将不得不更改所有受影响表中的数据类型,这将是一件痛苦的事情。因此,有时会在适应 future 增长和挤压当今绝对最大的性能之间进行权衡。如果你不确定你永远不会超过 255 或 32,000 个值,那么我可能只是一个 INT .除非你也不知道你永远不会超过 20 亿个值,在这种情况下你会使用 BIGINT .INT 之间的区别/SMALLINT/TINYINT磁盘空间将比性能更明显。 (如果您使用的是 Enterprise,磁盘空间和性能的差异可以使用数据压缩来抵消很多 - 特别是当您的 INT 值都适合 SMALLINT/TINYINT 时,尽管在后一种情况下它确实可以忽略不计,因为这些值是唯一的。)另一方面,这些值与 GUID 之间的差异在性能和磁盘空间方面都将更加引人注目。 Marc 提供了一些来自 Kimberly 的很棒的链接; I wrote this article 2003 年,虽然它有点过时,但它确实包含了今天仍然相关的大部分要点。
    有时需要考虑的另一个权衡(尽管似乎不是在您的特定情况下)是值是否需要在多个系统中是唯一的。这是您可能需要牺牲一些性能以满足业务需求的地方。在很多情况下,人们会采取简单的方法并辞职到GUID。 .但也有其他解决方案,例如身份范围、中央自定义序列生成器和新的 SEQUENCE SQL Server 2012 中的对象。I wrote about SEQUENCE 早在 2010 年 SQL Server 2012 的第一个公共(public)测试版发布时。

    关于sql-server - 选择 SQL Server 数据类型以获得最大速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267046/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com