首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化包含geography列的sql表

如何优化包含geography列的sql表
EN

Stack Overflow用户
提问于 2015-11-11 14:33:02
回答 1查看 123关注 0票数 4

我们将地理数据存储在" location“表中,并根据该列搜索给定输入的最近位置。下面的查询用于获取25英里内的最近位置,此查询需要4秒以上的时间来检索4000条记录。我们甚至在位置字段上创建了空间索引。

代码语言:javascript
复制
DECLARE @Distance INT

SET @Distance =25

DECLARE @h sys.GEOGRAPHY

SET @h =CONVERT(sys.GEOGRAPHY, 0xE6100000010C92B06F27119D4140111AC1C6F53554C0)

SELECT CenterLocationId,
       [Location].Stdistance(@h) * Cast(0.000621371 AS FLOAT(53)) AS Distance
FROM   [dbo].[CenterLocation]
WHERE  [Location].Stdistance(@h) * Cast(0.000621371 AS FLOAT(53)) <= @Distance
       AND IsDeleted = 0
ORDER  BY [Location].Stdistance(@h) * Cast(0.000621371 AS FLOAT(53)) 

有人能建议如何在sql server 2014中提高这种查询性能吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 16:07:31

有两件事,不能保证能解决问题,但肯定能有所帮助。它们都是相关的:

代码语言:javascript
复制
SELECT CenterLocationId,
       [Location].Stdistance(@h) * Cast(0.000621371 AS FLOAT(53)) AS Distance
FROM   [dbo].[CenterLocation]
WHERE  [Location].Stdistance(@h) <= @Distance / Cast(0.000621371 AS FLOAT(53))
       AND IsDeleted = 0
ORDER  BY [Location].Stdistance(@h)

也就是说,最好不要在WHERE子句中对依赖于列值的表达式执行数学运算-这样会迫使服务器对每一行执行该数学运算,并破坏使用索引的任何可能性。

同样,在ORDER BY子句中执行乘法也没有意义,因为乘法(乘以正数)不会改变顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33645380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档