为什么聚簇索引搜索工作缓慢?

时间:2019-03-25 11:06:58

标签: sql-server

我有这个查询:

SELECT 
    [ID], [geom] AS geom , [Label], [Style] 
FROM  
    [ogc].[0006000004C9]
WHERE 
    [geom] IS NOT NULL 
    AND [geom].STIsValid() = 1 
    AND ([geom].STArea() = 0 OR [geom].STArea() > 79.3734125) 
    AND ([geom].STLength() = 0  OR [geom].STLength() > 39.68670625)
    AND [geom].STIntersects(@g) = 1 

表包含约70万行。查询返回约7万行,耗时9秒。

在执行计划中,我看到空间运算(STIntersects())仅占1%。但是聚簇索引搜寻需要71%。

enter image description here

在此搜索中:

enter image description here

这是我的PK:

ALTER TABLE [ogc].[0006000004C9] 
    ADD CONSTRAINT [PK_0006000004C9] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
                      ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

什么是扩展索引,这是我的PK还是查询忽略它?如何缩短执行时间?

其他信息:

  • SQL Server 2014
  • 兼容级别120

表结构:

CREATE TABLE [ogc].[0006000004C9]
(
    [ID] [INT] IDENTITY(1,1) NOT NULL,
    [geom] [GEOMETRY] NOT NULL,
    [Object_ID] [CHAR](12) NOT NULL,
    [Sector_ID] [CHAR](12) NOT NULL,
    [Style] [CHAR](12) NOT NULL,
    [StyleName] [VARCHAR](MAX) NULL,
    [Label] [VARCHAR](80) NULL,

    CONSTRAINT [PK_0006000004C9] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

更新 我何时删除STIntersection()我的查询:

    SELECT 
    [ID], [geom] AS geom , [Label], [Style] 
FROM  
    [ogc].[0006000004C9]
WHERE 
    [geom] IS NOT NULL 
    AND [geom].STIsValid() = 1 
    AND ([geom].STArea() = 0 OR [geom].STArea() > 79.3734125) 
    AND ([geom].STLength() = 0  OR [geom].STLength() > 39.68670625)
    AND [geom].STIntersects(@g) = 1 

在计划中,我看到:

[![enter image description here][3]][3]

真好。实际和估计时间相同,没有任何扩展索引。而且查询仅需8 seconds。因此,对于STIntersects来说,查询有效9 seconds。那么8秒是正常情况还是缓慢,有什么方法可以改进?

0 个答案:

没有答案