慢速运行查询 - 索引是否有帮助?不确定如何处理执行计划

时间:2016-01-28 15:07:03

标签: sql-server tsql indexing sql-server-2014

我在下面这个慢速运行的查询在一分半钟内在SQL Server 2014中返回3,023行。有什么办法可以加快速度吗?

我在其加入的所有字段上都有索引。 ArticleAuthor有9900万行,#ArticleAuthorTemp预先很快填充,我需要从ArticleAuthor(3,023行)获得的所有ID,执行计划的成本为0%。我填写临时表只是为了限制它在你在这里看到的查询中所做的事情。

下面的查询的执行计划是说它花费大部分时间在2次密钥查找和索引搜索上,每种情况都在30%左右。我不确定如何从这些创建所需的索引,或者甚至是否有帮助?索引的新东西。我讨厌在所有东西上抛出索引。即使没有2 LEFT JOINS或外部查询,它也很慢,所以我认为真正的问题在于ArticleAuthor表。您也会在下面的表格中看到我的索引...... :)

如果有帮助,我可以提供执行计划所需的任何信息。

SELECT tot.*,pu.LastName+', '+ ISNULL(pu.FirstName,'') CreatedByPerson,COALESCE(pf.updateddate,pf.CreatedDate) CreatedDatePerson 
from (      
    SELECT  CONVERT(VARCHAR(12), AA.Id) ArticleId
            , 0 Citations
            , AA.FullName
            , AA.LastName
            , AA.FirstInitial
            , AA.FirstName GivenName
            , AA.Affiliations
    FROM ArticleAuthor AA WITH (NOLOCK) 
    INNER JOIN #ArticleAuthorTemp AAT ON AAT.Id = AA.Id
)tot LEFT JOIN AcademicAnalytics..pub_articlefaculty pf WITH (NOLOCK) ON tot.ArticleId = pf.SourceId
    LEFT JOIN AAPortal..portal_user pu on pu.id = COALESCE(pf.updatedby,pf.CreatedBy) 

索引:

CREATE CLUSTERED INDEX [IX_Name] ON [dbo].[ArticleAuthor]
(
[LastName] ASC,
[FirstName] ASC,
[FirstInitial] ASC
)

CREATE NONCLUSTERED INDEX [IX_ID] ON [dbo].[ArticleAuthor]
(
[Id] ASC
)

CREATE NONCLUSTERED INDEX [IX_ArticleID] ON [dbo].[ArticleAuthor]
    (
[ArticleId] ASC
    )

1 个答案:

答案 0 :(得分:0)

谷歌CREATE INDEX声明并了解INCLUDES部分。通过包含查询需要返回的所有列,使用INCLUDES来消除Key Looks。