我正在使用SQL Azure和Entity Framework 6,需要找到5000个区域(多边形)与点相交的区域。
我的代码看起来有点像这样
List<object> res = context.Areas
.Where(a => a.Polygon.Intersects(usersLoction))
.ToList();
这转化为看起来有点像这样的SQL
SELECT *
FROM Areas a
WHERE a.Polygon.STIntersects(0xE6100000010CBD14289E87AA4A403CACC9610DEB18C0) = 1
此查询的性能是绝对的,需要7秒多的时间才能在SQL Azure上搜索5000个区域。多边形通常是环状的。
我不是这个领域的专家,但到目前为止,我已经知道可以创建一个空间索引,在对该区域执行完整的交叉检查之前预先过滤结果集。我认为这个索引在我的情况下会非常好用,因为这些区域通常非常简单,如果SQL将每个多边形视为一个矩形,它会很好地过滤掉结果。
但经过几个小时的研究后,我不知道如何在Azure中创建和使用空间索引。
请问有些灵魂请提供添加我需要的索引的命令吗?