Sql 改进包含列的聚集键索引查找,75%的成本

Sql 改进包含列的聚集键索引查找,75%的成本,sql,sql-server,query-optimization,Sql,Sql Server,Query Optimization,我在SQL中遇到一些查询速度慢的问题。我们使用.net实体框架和SQL。几年前,我们有一位SQL顾问,他在一些最糟糕的表上添加了一些非聚集键索引。一个维护计划已经到位,可以在夜间重新组织索引,但是我们仍然需要花费很高的成本来进行聚集索引Seek,以便进行TBLDIARY预约。我不是DBA,但我觉得我一路上学到了很多东西,从下面的图片中,谓词是startDateTime,在非聚集键中排序,但似乎很难找到相关的DiaryAppointId(PK)。我们应该将diaryAppointmentID添加到

我在SQL中遇到一些查询速度慢的问题。我们使用.net实体框架和SQL。几年前,我们有一位SQL顾问,他在一些最糟糕的表上添加了一些非聚集键索引。一个维护计划已经到位,可以在夜间重新组织索引,但是我们仍然需要花费很高的成本来进行聚集索引Seek,以便进行TBLDIARY预约。我不是DBA,但我觉得我一路上学到了很多东西,从下面的图片中,谓词是startDateTime,在非聚集键中排序,但似乎很难找到相关的DiaryAppointId(PK)。我们应该将diaryAppointmentID添加到当前为空的包含列中吗

谓词:

[CMS3SWE].[dbo].[tblDiaryAppointments].[startDateTime] as [Extent7].[startDateTime]<[@p__linq__1] AND (3)=[CMS3SWE].[dbo].[tblDiaryAppointments].[diaryAppointmentTypeID] as [Extent7].[diaryAppointmentTypeID]
非常感谢您的帮助


你有一个执行计划的图像,然后用一个弹出对话框覆盖重要部分。你为什么这么做?比一张照片好;使用这些子查询,在子查询中,在子查询中,在。。。。我不知道从哪里开始。这里有太多的危险信号。别名与列的名称相同。无意义的列名,表示违反1NF的可能性很高。嵌套在查询中的查询嵌套在嵌套在查询中的查询中。每个级别中具有相同名称的列。顶部没有订单。恐怕解决这一问题的最佳方法是单击[ctrl]+[n],然后重新开始,也许可以一直回到表格设计。您可以发布实际的执行计划吗?请不要在谷歌硬盘上以文本形式发布。按照上面的链接粘贴计划或发布文档本身。
[CMS3SWE].[dbo].[tblDiaryAppointments].diaryAppointmentID = Scalar Operator([CMS3SWE].[dbo].[tblDiaryAppointmentAttendees].[diaryAppointmentID] as [Extent6].[diaryAppointmentID])
SELECT 
[Project34].[schemeID] AS [schemeID], 
 CAST( [Project34].[startDateTime] AS datetime2) AS [C1], 
[Project34].[clientID] AS [clientID], 
[Project34].[fullName] AS [fullName], 
[Project34].[C1] AS [C2], 
CASE WHEN ([Project34].[C2] IS NULL) THEN -1 ELSE [Project34].[C3] END AS [C3], 
[Project34].[C4] AS [C4], 
[Project34].[C5] AS [C5], 
CASE WHEN ([Project34].[C6] IS NULL) THEN -1 ELSE [Project34].[C7] END AS [C6], 
CASE WHEN ([Project34].[C8] IS NULL) THEN -1 ELSE [Project34].[C9] END AS [C7]
FROM ( SELECT 
    [Project32].[schemeID] AS [schemeID], 
    [Project32].[clientID] AS [clientID], 
    [Project32].[startDateTime] AS [startDateTime], 
    [Project32].[fullName] AS [fullName], 
    [Project32].[C1] AS [C1], 
    [Project32].[C2] AS [C2], 
    [Project32].[C3] AS [C3], 
    [Project32].[C4] AS [C4], 
    [Project32].[C5] AS [C5], 
    [Project32].[C6] AS [C6], 
    [Project32].[C7] AS [C7], 
    [Project32].[C8] AS [C8], 
    (SELECT TOP (1) 
        [Extent22].[contractorID] AS [contractorID]
        FROM [dbo].[tblReferral] AS [Extent22]
        WHERE [Project32].[schemeID] = [Extent22].[schemeID]) AS [C9]
    FROM ( SELECT 
        [Project31].[schemeID] AS [schemeID], 
        [Project31].[clientID] AS [clientID], 
        [Project31].[startDateTime] AS [startDateTime], 
        [Project31].[fullName] AS [fullName], 
        [Project31].[C1] AS [C1], 
        [Project31].[C2] AS [C2], 
        [Project31].[C3] AS [C3], 
        [Project31].[C4] AS [C4], 
        [Project31].[C5] AS [C5], 
        [Project31].[C6] AS [C6], 
        [Project31].[C7] AS [C7], 
        [Project31].[C8] AS [C8]
        FROM ( SELECT 
            [Project29].[schemeID] AS [schemeID], 
            [Project29].[clientID] AS [clientID], 
            [Project29].[startDateTime] AS [startDateTime], 
            [Project29].[fullName] AS [fullName], 
            [Project29].[C1] AS [C1], 
            [Project29].[C2] AS [C2], 
            [Project29].[C3] AS [C3], 
            [Project29].[C4] AS [C4], 
            [Project29].[C5] AS [C5], 
            [Project29].[C6] AS [C6], 
            [Project29].[C7] AS [C7], 
            (SELECT TOP (1) 
                [Extent21].[contractorID] AS [contractorID]
                FROM [dbo].[tblReferral] AS [Extent21]
                WHERE [Project29].[schemeID] = [Extent21].[schemeID]) AS [C8]
            FROM ( SELECT 
                [Project28].[schemeID] AS [schemeID], 
                [Project28].[clientID] AS [clientID], 
                [Project28].[startDateTime] AS [startDateTime], 
                [Project28].[fullName] AS [fullName], 
                [Project28].[C1] AS [C1], 
                [Project28].[C2] AS [C2], 
                [Project28].[C3] AS [C3], 
                [Project28].[C4] AS [C4], 
                [Project28].[C5] AS [C5], 
                [Project28].[C6] AS [C6], 
                [Project28].[C7] AS [C7]
                FROM ( SELECT 
                    [Project26].[schemeID] AS [schemeID], 
                    [Project26].[clientID] AS [clientID], 
                    [Project26].[startDateTime] AS [startDateTime], 
                    [Project26].[fullName] AS [fullName], 
                    [Project26].[C1] AS [C1], 
                    [Project26].[C2] AS [C2], 
                    [Project26].[C3] AS [C3], 
                    [Project26].[C4] AS [C4], 
                    [Project26].[C5] AS [C5], 
                    [Project26].[C6] AS [C6], 
                    (SELECT TOP (1) 
                        [Extent20].[teamID] AS [teamID]