首页 > 解决方案 > 如何优化 SQL Server 表上的索引

问题描述

我有以下查询

SELECT 
    vbShape, XMIN, YMIN, XMAX, YMAX,  GlobalID
FROM
    (SELECT * 
     FROM features 
     WHERE vbShape IS NOT NULL) A
WHERE 
    XMIN <= -13036746.0212491 AND XMAX >= -13037147.3156476 AND 
    YMIN <= 3988531.90850796 AND YMAX >= 3988130.61410953

XMIN、XMAN、YMIN、YMAX 都是浮点列。

我需要这个查询尽可能快地运行。每毫秒都至关重要。GlobalID是主键。我应该为这个表添加什么样的索引?我目前在表上为 XMIN、XMAX、YMIN 和 YMAX 字段定义了 4 个非聚集索引。我是否还应该定义一个索引来包含所有字段?或者我应该添加两个索引?XMIN/XMAX 一个,YMIN/YMAX 一个?添加太多索引有什么问题吗?

标签: sqlsql-serverperformanceindexing

解决方案


单个查询只能使用它读取的每个表上的一个索引。无论您在表上创建多少索引,此查询都只会使用其中的一个。

因此,您需要一个涵盖查询中过滤的所有列并包含返回的列的单个索引。


推荐阅读