SQL列名称结构,以获得最佳搜索性能

时间:2014-05-26 14:38:46

标签: sql sql-server coordinates latitude-longitude

我有处理GPS坐标长/纬度值的代码,并反向对它们进行地理编码,以使用地理位置API确定每组坐标的物理街道位置。

确定位置后,信息 - 例如街道号,街道名称,郊区等 - 将存储在位置表中。

我的问题涉及构建长/纬度值的最佳方法是什么,以便执行最佳搜索性能。

这个想法是每次接收到一对新的长/纬度值时,系统首先在位置表中搜索具有匹配值的记录。如果存在,系统将跳过地理位置过程,系统将使用包含位置详细信息列的匹配长/纬度值的记录的记录ID。如果未找到匹配的记录,则系统处理地理位置代码,然后将位置详细信息作为新记录插入到位置表中。这样,位置表中存储的记录永远不会超过1条,这些记录具有相同的long / lat

存储长/纬和列类型的最佳结构是什么,因为需要搜索表是否存在匹配的长/纬?

选项1

有一个名为坐标的nvarchar列,其值类似于" -27.215421854 / 153.21545748"然后根据坐标列中的现有值搜索新的long / lat值的匹配字符串。

在这个例子中,我使用新坐标执行一个简单的SQL查询来搜索表中的坐标列,以查找是否有匹配的记录。

选项2

我最好有一个单独的长列和纬度列,而不是将两个值组合到坐标列中吗?

在这个例子中,我使用新的坐标执行SQL查询,以搜索长列和纬度列(长期像[&new 39] [和新的lon val]'并且类似于' [new lat]在表格中查找是否有匹配的记录。

目标是找到最有效的数据库列结构,以便数据库以最有效的方式执行搜索。

1 个答案:

答案 0 :(得分:1)

如果您需要单独使用纬度或经度(并且您可能会),那么您应该使用两列。实际上,除非使用复合字符串格式的内置类型,否则最好使用两列。

复合列几乎总是坏消息。包含以逗号分隔的值列表的列必须在以后搜索,这将成为灾难。

相关问题