我有两个具有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是否只是不太擅长针对数据集计算几何数据? 我看到的大多数代码示例都只涉及一个带有单个值的几何类型变量。
答案 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权限以停止寻找最多包含该点的一个多边形。
注意:我将其发布为答案而不是评论的唯一原因是发布的格式和长度。 这可能不起作用!