我有一个包含以下结构的6000万条记录的表
CREATE TABLE dbo.cus_pivot_non_unique_indexes
(
SEQ_ID BIGINT,
SRM_CLIENT_ENTITIES_SEQ_ID BIGINT,
CUS_ENTITY_DATA_SEQ_ID BIGINT,
SRM_CLIENT_ENTITY_ATTRIBUTES_SEQ_ID BIGINT,
ATTRIBUTE_DATETIME DATETIME,
ATTRIBUTE_DECIMAL DECIMAL(18, 2),
ATTRIBUTE_STRING NVARCHAR(255),
ATTRIBUTE_BOOLEAN CHAR(1),
SRM_CLIENTS_SEQ_ID BIGINT
)
该表有两个索引。
SEQ_ID
非唯一非聚集索引:我遵循了四个复合索引
一个。 SRM_CLIENTS_SEQ_ID, SRM_CLIENT_ENTITIES_SEQ_ID, SRM_CLIENT_ENTITY_ATTRIBTUES_SEQ_ID, ATTRIBUTE_DATETIME
湾SRM_CLIENTS_SEQ_ID, SRM_CLIENT_ENTITIES_SEQ_ID, SRM_CLIENT_ENTITY_ATTRIBTUES_SEQ_ID, ATTRIBUTE_DECIMAL
℃。 SRM_CLIENTS_SEQ_ID, SRM_CLIENT_ENTITIES_SEQ_ID, SRM_CLIENT_ENTITY_ATTRIBTUES_SEQ_ID, ATTRIBUTE_STRING
d。 SRM_CLIENTS_SEQ_ID, SRM_CLIENT_ENTITIES_SEQ_ID, SRM_CLIENT_ENTITY_ATTRIBTUES_SEQ_ID, ATTRIBUTE_BOOLEAN
问题在于,当我对此表执行简单查询时,它不会在可接受的时间内返回结果。
查询:
SELECT CUS_ENTITY_DATA_SEQ_ID
FROM dbo.cus_pivot_non_unique_indexes
WHERE srm_client_entity_attributes_seq_id = 51986
AND attribute_decimal = 4150196
执行时间:2秒
由于
答案 0 :(得分:7)
您拥有的索引对此查询无用。
您需要一个带有前导列SRM_CLIENT_ENTITY_ATTRIBUTES_SEQ_ID, ATTRIBUTE_DECIMAL
(按任意顺序)才能获得搜索。
可能您可能希望INCLUDE
其他表列使索引覆盖并避免查找。这取决于谓词的选择性和总体工作负载平衡。