关于几何属性的SQL Server连接表非常慢-这是最有效的方法吗?

时间:2018-09-11 00:30:37

标签: sql sql-server geometry sql-server-2014

我有两个具有Geometry数据类型的MS SQL Server( v11.0 )表。一个拥有大约8000个点记录,另一个拥有100个多边形记录。

两个表在适当的几何列上都有空间索引,并且都使用相同的SRID。

出于指定的报告目的,我需要提取所有点的名称列表以及其所在的多边形的名称。所有点都在多边形的一个之内。多边形不重叠

我使用以下查询:

SELECT points.point_label, polygons.polygon_label
FROM 
points WITH (NOLOCK) INNER JOIN
polygons WITH (NOLOCK) ON 
polygons.polygon_geometry.STContains(points.point_geometry) = 1

它可以工作,但是返回所有包含多边形标签的〜8000点行非常慢。

是否有更有效的方式加入他们的行列,以实现我想要的结果? SQL Server是否只是不太擅长针对数据集计算几何数据? 我看到的大多数代码示例都只涉及一个带有单个值的几何类型变量。

1 个答案:

答案 0 :(得分:1)

这完全是SWAG,但是根据您对数据的描述,我会尝试这样做:

<div class="invoices"> <div ng-repeat="table in invoicesTables"> <div class="header row"><br> <div style="margin-bottom: 20px;" class="col-xs-12"> <img src="src/print_statement.PNG" alt=""> </div> <div class="col-xs-4"> <h5>Customer: <strong style="font-size: 12pt">{{client.Name}}</strong></h5> </div> <div class="col-xs-4"> <h5 class="invoiceNumber">Invoice No.: <strong style="font-size: 13pt; color:red">{{table.invoiceNumber}}</strong></h5> </div> <div class="col-xs-3"> <h5> <span>Date: </span><strong style="font-size: 12pt;">{{today | date: fullDate}}</strong> <!-- <span style="float:left">From: </span><strong style="font-size: 12pt; float:right;">{{table.startDate | date: fullDate}}</strong> </br></br> <span style="float:left">Till: </span><strong style="font-size: 12pt; float:right;">{{table.endDate | date: fullDate}}</strong> --> </h5> </div> </div> <div class="invoicebg"> <table class="table"> <thead> <tr> <th>Date</th> <th>Delivery No.</th> <th colspan="2">Description</th> <th>Amount</th> </tr> </thead> <tbody> <tr ng-repeat="i in table.tableInvoices | orderBy : '-Date' | reverse "> <td>{{i.Date | date: fullDate}}</td> <td>{{i.Id}}</td> <td colspan="2">{{i.Name}}</td> <td>{{i.Amount | number : 2}}$</td> </tr> </tbody> </table> <div ng-style="emptySpaces[$index]"></div> <div style="font-weight:bold" class="tfoot row"> <div class="col-xs-3" style="border-top:2px solid black;"> أو ما بعادله بالليرة اللبنانية </div> <div class="col-xs-7" style="border-top:2px solid black; background-color:lightgray;"> {{table.totalInLetters}} Dollars <span style="float:right;">فقط</span> </div> <div class="col-xs-2" style="border:2px solid black;"> {{table.total | number: 2}}$ </div> </div> </div> </div>

您正在授予SQL权限以停止寻找最多包含该点的一个多边形。

注意:我将其发布为答案而不是评论的唯一原因是发布的格式和长度。 这可能不起作用!