none
关于多次连接的索引问题 RRS feed

  • 问题

  • 我这里有这样的一个查询
    SELECT  L.ReportId AS ReportId,
            SE.[Name] AS SearchEngine,
            SUM(FC.[Count]) AS SearchCount
    FROM    [DSDatabase].dbo.tbLocales AS L
            LEFT OUTER JOIN ( SELECT    [Name],
                                        LocaleID,
                                        SEADId
                              FROM      [DSDatabase].dbo.tbSEAD
                              WHERE     [Type] = 'SE'
                            ) AS SE ON L.LocaleID = SE.LocaleID
            LEFT OUTER JOIN ( SELECT    [SEID],
                                        [Count]
                              FROM      [DSDatabase].dbo.tbFormCodes
                              WHERE     Vertical = 'W'
                            ) AS FC ON FC.SEID = SE.SEADId
    GROUP BY L.ReportID,
            SE.[Name]
    目前的索引情况如下(键列顺序和我给出索引的键列顺序一致,此处忽略覆盖列):
    1. tbLocales, 键列LocaleID, ReportID
    2. tbSEAD, 键列Type,SEADId,LocaleID,Name
    3. tbFormCodes,键列Vertical,SEID

    目前的查询计划是这样的

    这里有两次连接,一次分组,第一次连接用了Merge Join,然后第二次连接和分组就用了hash match,为什么会这样,有没有方法可以避免Hast match.

    望赐教
    2009年9月14日 11:11

答案