use*_*901 1 sql sql-server sql-server-2008
我有一个包含以下结构的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
)
Run Code Online (Sandbox Code Playgroud)
该表有两个索引.
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
C. 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
Run Code Online (Sandbox Code Playgroud)
执行时间:2秒
谢谢
您拥有的索引对此查询没有用.
你需要一个带有前导列SRM_CLIENT_ENTITY_ATTRIBUTES_SEQ_ID, ATTRIBUTE_DECIMAL(按任意顺序)才能获得搜索.
可能您可能希望INCLUDE其他表列使索引覆盖并避免查找.这取决于谓词的选择性和总体工作负载平衡.