什么时候发生,适用于什么情况?
请看下面两个语句 其中im_school是学校表,pm_person是学生表,学生表的schoolid是学校表的主键,有外键索引,学校表的code上也有索引。
select * from im_school s, pm_person p where p.schoolid = s.id
|--Hash Match(Inner Join, HASH
.[id])=([p].[schoolid]), RESIDUAL
.[id]=[p].[schoolid]))
|--Clustered Index Scan(OBJECT
[citycarddbtest].[dbo].[im_school].[PK_IM_SCHOOL] AS ))
|--Clustered Index Scan(OBJECT
[citycarddbtest].[dbo].[pm_person].[PK_PM_PERSON] AS [p]))
select * from im_school s, pm_person p where p.schoolid = s.id and s.code='01021001'
|--Bookmark Lookup(BOOKMARK
[Bmk1001]), OBJECT
[citycarddbtest].[dbo].[pm_person] AS [p]) WITH PREFETCH)
|--Nested Loops(Inner Join, OUTER REFERENCES
.[id]))
|--Bookmark Lookup(BOOKMARK
[Bmk1000]), OBJECT
[citycarddbtest].[dbo].[im_school] AS ))
||--Index Seek(OBJECT
[citycarddbtest].[dbo].[im_school].[i_im_sch_code] AS ), SEEK:(.[code]='01021001') ORDERED FORWARD)
|--Index Seek(OBJECT:([citycarddbtest].[dbo].[pm_person].[index_pm_schoolid] AS [p]), SEEK:([p].[schoolid]=.[id]) ORDERED FORWARD)
请结合这两句给解释下,为什么第一句就是hash, 第二句就是nested?其中im_school 有1944行,pm_person有1000972行
|