Sql Server 2008 中 1 个几何列与 4 个小数的相对性能是多少?

Posted

技术标签:

【中文标题】Sql Server 2008 中 1 个几何列与 4 个小数的相对性能是多少?【英文标题】:What is the relative performance of 1 geometry column vs 4 decimals in Sql Server 2008? 【发布时间】:2012-02-19 07:20:02 【问题描述】:

我需要在 SQL Server 2008 数据库中表示 quadrilateral 矩形曲面的尺寸。我需要根据不同点之间的距离和表面的总面积执行查询。

使用几何数据类型或 4 个十进制列会更好吗?为什么?

如果在这种情况下不需要几何数据类型,那么几何形状的复杂度需要多少才能使几何数据类型有意义?

【问题讨论】:

听起来拥有足够的信息来设置代表性数据和查询,并确定哪些表现更好——我们没有。性能问题通常无法在摘要中回答。 @Damien_The_Unbeliever,我同意需要在特定上下文中回答特定的性能问题,但我认为比较使用两种不同类型的工作速度对于这个问题来说已经足够普遍了。有人说“一般来说,查询int 列比查询varchar(255) 列更快”是有道理的,我真的不明白这有什么不同。 主要是因为我不知道你打算在这 4 个十进制列中存储 什么 - 你从谈论四边形开始 - 如果我要存储一个作为小数,我以为我会存储 4 个坐标,因此需要 8 列。你显然有一些设计,这意味着 4 列将适用于你的具体情况,但我不知道那个设计是什么...... @Damien_The_Unbeliever,它们实际上是矩形,我应该更具体一些。 【参考方案1】:

我没有使用几何数据类型,也没有理由阅读它。即便如此,在我看来,如果您只是对一个简单的几何对象进行基本的算术运算,那么普通的旧 SQL 数据类型应该是相当有效的,特别是如果您在一些计算列中折腾来进行经常使用的计算。

例如:

--DROP TABLE MyTable
CREATE TABLE MyTable
 (
   X1  decimal  not null
  ,Y1  decimal  not null
  ,X2  decimal  not null
  ,Y2  decimal  not null
  ,Area as abs((X2-X1) * (Y2-Y1))
  ,XLength as abs((X2 - X1))
  ,YLength as abs((Y2 - Y1))
  ,Diagonal as sqrt(power(abs((X2 - X1)), 2) + power(abs((Y2 - Y1)), 2))
 )

INSERT MyTable values (1,1,4,5)
INSERT MyTable values (4,5,1,1)
INSERT MyTable values (0,0,3,3)

SELECT * from MyTable

丑陋的计算,但它们不会被执行,除非它们被实际引用(或者除非你选择索引它们)。我没有统计数据,但通过 Geometry 数据类型执行相同的操作可能意味着访问很少使用的数学子例程,可能嵌入在系统 CLR 程序集中,我只是看不出它比裸机快得多-bones SQL 算术例程。

我刚刚查看了几何数据类型的 BOL。 (一)Zounds! (b) 酷!查看“几何数据类型方法参考”下的条目(online here ,但您想查看此条目下的扩展树视图。)如果这是您需要的功能,请务必使用几何数据类型,但为了简单的处理,我会坚持使用指关节数据类型。

【讨论】:

【参考方案2】:

几何数据类型比简单的小数更复杂,因此只会产生开销。但它们确实提供了计算两点之间距离的函数,我认为这些函数已经过优化。问题可能是您是否实现了点之间的距离逻辑 - 这是否会比一开始就以适当的格式获取数据需要更长的时间。

因为每个数据库问题都可能与插入与选择/计算的比率有关

【讨论】:

创建包含这些列的记录的唯一用户将是管理员,但是,所有用户都会查询他们。 (选择 + 计算比插入多得多) 那么我会认为使用内置功能应该会给你更好的性能。我没有证据,所以很想看看人们对此的回答:-) 我的想法正好相反。我的理由是,我的用例处于数据类型支持的复杂性的极低端。数据类型的基础架构允许很多,创建数据实例的成本可能比查询逻辑的内置优化更大。【参考方案3】:

Geometry 数据类型是空间,decimal 不是,

空间数据与非空间数据

空间数据包括位置、形状、大小和方向。 例如,考虑一个特定的正方形: 它的中心(它的对角线的交点)指定它的位置 它的形状是正方形 它的一侧的长度指定了它的大小 它的对角线与 x 轴所成的角度指定了它的方向。 空间数据包括空间关系。例如,十个保龄球瓶的排列是空间数据。

非空间数据(也称为属性或特征数据)是独立于所有几何因素的信息。 例如,一个人的身高、体重和年龄是非空间数据,因为它们与人的位置无关。 有趣的是,虽然质量是非空间数据,但重量是空间数据,因为某物的重量很大程度上取决于其位置!

可以忽略空间数据和非空间数据之间的区别。但是,它们之间存在根本区别: 空间数据通常是多维和自相关的。 非空间数据通常是一维的且独立的。

这些区别将空间和非空间数据归入不同的哲学阵营,对概念、处理和存储问题产生深远影响。 例如,排序可能是最常见和最重要的非空间数据处理功能。 如何对位置数据进行排序以使所有点最终都在“附近”,这并不明显。他们最近的邻居。

这些区别证明了单独考虑空间和非空间数据模型的合理性。除非另有说明,否则本单元只关注后者。

如果您有兴趣,这里还有一些: http://www.ncgia.ucsb.edu/giscc/units/u045/u045_f.html

这是我找到的关于空间数据仓库基准测试的链接:http://hpc.ac.upc.edu/Talks/dir08/T000327/paper.pdf

【讨论】:

关于性能的问题 - 但类型之间的比较非常清晰 Zee Tee,我已经了解您刚刚发布的所有内容。我的问题不是关于geometrydecimal 之间的区别,而是在应用程序中使用它们的相对性能之间的区别。我的对象模型将数据表示为空间数据,但我的用例非常简单,我可以有效地使用 4 个decimal 列来表示模型。如果性能不是问题,我会使用geometry,因为它是更准确的表示,但如果存在显着的性能差异,我愿意为我的查询编写额外的代码。 这是我找到的关于基准空间数据仓库的链接:hpc.ac.upc.edu/Talks/dir08/T000327/paper.pdf 那篇文章非常密集,所以我在浏览时可能遗漏了一些内容,但它看起来像是在建议对空间数据仓库进行基准测试的程序。我正在寻找更多类似于将空间数据 = 使用基准与非空间数据使用基准进行比较的方法。

以上是关于Sql Server 2008 中 1 个几何列与 4 个小数的相对性能是多少?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:交叉引用一个表中的多个列与另一个表中的多个列

如何将excel数据加载到sql server 2008表中?

为啥安装的SQL SERVER 2008中SQL SERVER 服务只有1个

在 SQL Server 2012 中将两个 nvarchar 列与 Unicode 文本进行比较

sql server 2008 express的防火墙配置

2个sql server 2008 r2服务器相互访问对方的实例