【问题标题】:SQL Server Geography type performance - Data trigger vs. ViewsSQL Server 地理类型性能 - 数据触发器与视图
【发布时间】:2013-08-11 07:42:53
【问题描述】:

我正在尝试在 SQL Server 2008 R2 中使用 sys.geography 类型。我想将此地理类型用于基于位置的查询。例如,我将位置(作为经度和纬度变量)传递给存储过程并返回附近的任何记录。

问题是实体框架不支持地理类型,所以我不能直接从 c# 设置这个值。

我通过在同一个表中创建 LocationLatitude 和 LocationLongitude 列解决了这个问题。我使用实体框架中的 LocationLatitude 和 LocationLongitude 列,并使用数据库存储过程中的地理类型“Location”列。

据我所知,有三种方法可以从这两个字段中导出地理“位置”列。

  1. 将“位置”设为计算列
  2. 创建一个返回表格内容 + 计算位置的视图
  3. 在表上创建数据触发器。这会在每次更新 LocationLongitude 或 LocationLatitude 列时计算地理值并填充 Location 列。

我想知道哪个在性能方面会更好。我认为#1将是最糟糕的,所以我认为这是#2和#3之间的折腾。

我目前正在使用#3(数据触发器),但我知道通常最好避免使用数据触发器。这意味着从这个角度来看,#2(视图)将是最好的,但是......我担心使用#2可能是一件非常愚蠢的事情,出于某种原因。 Stack Overflow 是检查这一点的最佳场所!

Soo...我应该使用#1、#2、#3 还是其他方法?

【问题讨论】:

  • 我会挑战你的假设,即 #1 将是“最差”的 - 你认为这会使 #1 与 #2 有什么不同?
  • 我认为 EF5 支持地理数据类型。这是一个选择吗?
  • @Damien_The_Unbeliever 我认为每次查询表时都必须重新计算地理位置会很糟糕。通过拥有一个单独的视图,您只会在存储过程中调用它
  • @podiluska 嗯,可能吗?意味着我将不得不迁移到 .NET 4.5 和 Visual Studio 2012。无论如何,也许值得去做。
  • @podiluska 您能否将您的评论移到答案中以便我接受?

标签: sql-server sql-server-2008 entity-framework sqlgeography


【解决方案1】:

Entity Framework 5 支持地理数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2016-05-08
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多