尝试看看如何提高此 Sql 查询的性能
我有一个 SQL 查询,它试图查找某些县的所有社区。
当我使用 SQL Sentry Plan Explorer 可视化查询时(IMO,比 MS SSMS 提供的工具好一点),它突出显示了执行速度非常慢的部分:-
Full Plan
放大 ....
详细信息
< img src="https://i.sstatic.net/4gvNz.png" alt="在此处输入图像描述">
SQL 脚本:
-- Update which Neighbourhoods are in these Counties.
INSERT INTO @NeighbourhoodCounties (NeighbourhoodId, CountyId)
SELECT SubQuery.NeighbourhoodId, SubQuery.CountyId
FROM (
SELECT e.LocationId AS NeighbourhoodId, b.LocationId AS CountyId,
c.OriginalBoundary.STArea() AS CountyArea,
c.OriginalBoundary.STIntersection(d.OriginalBoundary).STArea() AS IntersectionArea
FROM @CountyIds a
INNER JOIN [dbo].[Counties] b ON a.Id = b.LocationId
INNER JOIN [dbo].[GeographyBoundaries] c ON b.LocationId = c.LocationId
INNER JOIN [dbo].[GeographyBoundaries] d ON c.OriginalBoundary.STIntersects(d.OriginalBoundary) = 1
INNER JOIN [dbo].[Neighbourhoods] e ON d.LocationId = e.LocationId
) SubQuery
WHERE (SubQuery.IntersectionArea / SubQuery.CountyArea) * 100 > 5 -- a Neighbourhood has to be 5% or more to be considered 'Inside'
任何人都可以帮助解释此查询吗?所有这些数字意味着什么?如何使用这些数字来帮助诊断和改进我的查询?
我尝试在空间上创建索引视图table 但这惨败了。
有人可以帮忙吗?
I've got a SQL query which is trying to find all the Neighbourhoods in some Counties.
When I use SQL Sentry Plan Explorer to visualize the query (IMO, a bit better than the tools provided with MS SSMS) it highlights a really slow performing part :-
Full Plan
Zoomed in ....
Details
SQL script:
-- Update which Neighbourhoods are in these Counties.
INSERT INTO @NeighbourhoodCounties (NeighbourhoodId, CountyId)
SELECT SubQuery.NeighbourhoodId, SubQuery.CountyId
FROM (
SELECT e.LocationId AS NeighbourhoodId, b.LocationId AS CountyId,
c.OriginalBoundary.STArea() AS CountyArea,
c.OriginalBoundary.STIntersection(d.OriginalBoundary).STArea() AS IntersectionArea
FROM @CountyIds a
INNER JOIN [dbo].[Counties] b ON a.Id = b.LocationId
INNER JOIN [dbo].[GeographyBoundaries] c ON b.LocationId = c.LocationId
INNER JOIN [dbo].[GeographyBoundaries] d ON c.OriginalBoundary.STIntersects(d.OriginalBoundary) = 1
INNER JOIN [dbo].[Neighbourhoods] e ON d.LocationId = e.LocationId
) SubQuery
WHERE (SubQuery.IntersectionArea / SubQuery.CountyArea) * 100 > 5 -- a Neighbourhood has to be 5% or more to be considered 'Inside'
Can anyone help interpret this query? What do all these numbers mean? How can I use these numbers to help diagnose and improve my query?
I tried to make an indexed view on the spatial table but that failed miserably.
Can anyone help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这本来是正常的。在大多数搜索的地方都没有粗条。
但是,我确实看到您在 JOIN 中的列上有一个函数,
这不会有帮助。计算列也无济于事
而且您还在 WHERE = 不可控制的列中进行了计算
从表面上看,64.5% 的查找可能是这些 JOIN 和围绕它们工作的优化器的结果
This would be normal. You have no thick bars anywhere with mostly seeks.
However, I do see that you have a function on a column in a JOIN
This won't help. And a computed column won't help either
And you also have a calculation on columns too in a WHERE = non-sargable
On the face of it, the 64.5% seek is probably a consequence of these JOINs and the optimiser working around them