SQL Server上DISTINCT的大量性能损失的解决方法?

时间:2012-04-10 10:50:42

标签: sql-server

当我将以下查询发送到我们的数据库时,它返回< 2秒:

select
    company3_.Un_ID as col_0_0_ 
from
    MNT_Equipments equip
inner join
    DynamicProperties dprops
        on equip.propertiesId=dprops.id
inner join
    DynamicPropertiesValue dvalues
        on dprops.id=dvalues.dynamicPropertiesId
inner join
    Companies company3_
        on dvalues.companyId=COMPANY.Un_ID
where
    equip.discriminator='9000'
    and equip.active=1
    and dvalues.propertyName='Eigentuemer' 

但是当我在select子句中添加一个distinct时,返回剩余的40个条目需要将近4.5分钟。这似乎有些不成比例 - 我可以做些什么来改善这一点,解决它或者至少找出这里到底发生了什么?

执行计划

没有区别

Plan 1

有明显的

Plan 2

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

聚簇索引扫描表明查询表上没有好的索引。 如果创建以下索引,则执行时间应该会改善。

CREATE NONCLUSTERED INDEX [IX_MNT_Equipments_Active] ON [MNT_Equipments] 
(
    [propertiesId] ASC,
    [discriminator] ASC,
    [active] ASC
)
GO

CREATE NONCLUSTERED INDEX [IX_DynamicPropertiesValue_Name] ON [DynamicPropertiesValue] 
(
    [propertyName] ASC
)
GO