我在下面这个慢速运行的查询在一分半钟内在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
)
答案 0 :(得分:0)
谷歌CREATE INDEX声明并了解INCLUDES部分。通过包含查询需要返回的所有列,使用INCLUDES来消除Key Looks。