sql-server - SQL Server 上 DISTINCT 造成巨大性能损失的解决方法?

标签 sql-server

当我向数据库发送以下查询时,它会在 < 2 秒内返回 4636 行:

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 子句添加一个 unique 时,几乎需要 4.5 分钟才能返回剩余的 40 个条目。这似乎有点不成比例 - 我可以做些什么来改进这个问题,解决它或者至少找出这里到底发生了什么?

执行计划

没有区别

Plan 1

具有独特性

Plan 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

关于sql-server - SQL Server 上 DISTINCT 造成巨大性能损失的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087335/

相关文章:

mysql - 根据插入情况对字符串进行排序

sql - 更改表添加具有默认值和 FK 的列,该值在 FK 引用数据中不存在

sql-server - 限制服务器端返回的行数(强制限制)

sql - 将日期范围与一组日期范围 SQL 进行比较

mysql - Sql Server 到 MySql 数据迁移

java - 收到错误 SQLServerException : The result set is closed

sql - 按组条件选择寄存器

mysql - 与括号比较时有什么区别 : WHERE (a, b)=(1,2)

sql-server - 无法解决 select 语句中第 5 列的排序规则冲突

c# - 如何解决 "String or binary data would be truncated.\r\nThe statement has been terminated."错误?