1、 優(yōu)化前的視圖(執(zhí)行select * from Query_NoEmployRegist用時(shí)127s)
代碼 1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 ALTER VIEW [dbo].[Query_NoEmployRegist] 6 AS 7 SELECT dbo.Person_BasicInfo.*, dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO, 8 dbo.Graduater_GraduaterRegist.RegistTime AS BaoDaoTime, 9 dbo.Graduater_GraduaterRegist.RegistMan AS RegistMan, 10 dbo.Graduater_Business.ComeFrom AS ComeFrom, 11 dbo.Graduater_Business.Code AS Code, dbo.Graduater_Business.Status AS Status, 12 dbo.Graduater_Business.ApPRoveResult AS ApproveResult, 13 dbo.Graduater_Business.NewCorp AS NewCorp, 14 dbo.Graduater_Business.CommendNumber AS CommendNumber, 15 dbo.Graduater_Business.EmployStatus AS EmployStatus, 16 dbo.Graduater_Business.NewCommendTime AS NewCommendTime, 17 dbo.Graduater_Business.GetSource AS GetSource, 18 dbo.Graduater_Business.EmployTime AS EmployTime, 19 dbo.Graduater_Business.Job AS Job, dbo.Graduater_Business.FillMan AS FillMan, 20 dbo.Graduater_Business.FillTime AS FillTime, 21 dbo.Graduater_Business.IsCommendOK AS IsCommendOK, 22 dbo.Graduater_Business.ApproveUser AS ApproveUser, 23 dbo.Graduater_Business.ApproveTime AS ApproveTime, 24 dbo.Graduater_Business.RegistTime AS RegistTime, 25 dbo.Graduater_Business.EmployCorp AS EmployCorp, 26 dbo.Graduater_Business.JobRemark AS JobRemark, 31 dbo.Person_Contact.Address AS Address, dbo.Person_Contact.Zip AS Zip, 32 dbo.Person_Contact.Telephone AS Telephone, dbo.Person_Contact.Mobile AS Mobile, 33 dbo.Person_Contact.Email AS Email, dbo.Person_Contact.IM AS IM, 34 dbo.Person_Skill.ForeignLanguage AS ForeignLanguage, 35 dbo.Person_Skill.ForeignLanguageLevel AS ForeignLanguageLevel, 36 dbo.Person_Skill.CantoneseLevel AS CantoneseLevel, 37 dbo.Person_Skill.MandarinLevel AS MandarinLevel, 38 dbo.Person_Skill.Language AS Language, 39 dbo.Person_Skill.TechnicalTitle AS TechnicalTitle, 40 dbo.Person_Skill.ComputerLevel AS ComputerLevel, 41 dbo.Person_EmployPurpose.JobType AS JobType, 42 dbo.Person_EmployPurpose.Vocation AS Vocation, 43 dbo.Person_EmployPurpose.JobPlace AS JobPlace, 44 dbo.Person_EmployPurpose.Salary AS Salary, 45 dbo.Person_EmployPurpose.OnJobDate AS OnJobDate, 46 dbo.Person_EmployPurpose.CorpType AS CorpType, 49 dbo.Graduater_Business.EmployType AS EmployType, 50 dbo.Graduater_Business.EmployTypeCode AS EmployTypeCode, 51 dbo.Graduater_Business.EmployCorpType AS EmployCorpType 56 FROM dbo.Person_BasicInfo INNER JOIN 57 dbo.Graduater_Business ON 58 dbo.Person_BasicInfo.PersonID = dbo.Graduater_Business.PersonID LEFT OUTER JOIN 59 dbo.Graduater_GraduaterRegist ON 60 dbo.Graduater_Business.GradBusinessID = dbo.Graduater_GraduaterRegist.GraduaterGUID 61 INNER JOIN 62 dbo.Person_Contact ON 63 dbo.Person_BasicInfo.PersonID = dbo.Person_Contact.PersonID INNER JOIN 64 dbo.Person_Skill ON 65 dbo.Person_BasicInfo.PersonID = dbo.Person_Skill.PersonID INNER JOIN 66 dbo.Person_EmployPurpose ON 67 dbo.Person_BasicInfo.PersonID = dbo.Person_EmployPurpose.PersonID 68 GO 69 SET ANSI_NULLS OFF 70 GO 71 SET QUOTED_IDENTIFIER OFF 72 GO 2、 優(yōu)化后的視圖(執(zhí)行select * from Query_NoEmployRegist用時(shí)98s)
代碼 1 SET ANSI_NULLS on 2 GO 3 SET QUOTED_IDENTIFIER on 4 GO 5 ALTER VIEW [dbo].[Query_NoEmployRegist] 6 AS 7 SELECT 8 dbo.Person_BasicInfo.PersonID, 9 dbo.Person_BasicInfo.IdentityID, 10 dbo.Person_BasicInfo.Name, 11 dbo.Person_BasicInfo.Sex, 12 dbo.Person_BasicInfo.Folk, 13 dbo.Person_BasicInfo.Politics, 14 dbo.Person_BasicInfo.Birthday, 15 dbo.Person_BasicInfo.StudentSource, 16 dbo.Person_BasicInfo.StudentSourceCode, 17 dbo.Person_BasicInfo.EduLevel, 18 dbo.Person_BasicInfo.EduLevelCode, 19 dbo.Person_BasicInfo.EduNumber, 20 dbo.Person_BasicInfo.Stature, 21 dbo.Person_BasicInfo.Avoirdupois, 22 dbo.Person_BasicInfo.MarriageStatus, 23 dbo.Person_BasicInfo.College, 24 dbo.Person_BasicInfo.GraduatedDate, 25 dbo.Person_BasicInfo.Train, 26 dbo.Person_BasicInfo.Major, 27 dbo.Person_BasicInfo.Degree, 28 dbo.Person_BasicInfo.DegreeCertificate, 29 dbo.Person_BasicInfo.StudyMode, 30 dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO, 31 dbo.Graduater_GraduaterRegist.RegistTime AS BaoDaoTime, 32 dbo.Graduater_GraduaterRegist.RegistMan AS RegistMan, 33 dbo.Graduater_Business.ComeFrom AS ComeFrom, 34 dbo.Graduater_Business.Code AS Code, dbo.Graduater_Business.Status AS Status, 35 dbo.Graduater_Business.ApproveResult AS ApproveResult, 36 dbo.Graduater_Business.NewCorp AS NewCorp, 37 dbo.Graduater_Business.CommendNumber AS CommendNumber, 38 dbo.Graduater_Business.EmployStatus AS EmployStatus, 39 dbo.Graduater_Business.NewCommendTime AS NewCommendTime, 40 dbo.Graduater_Business.GetSource AS GetSource, 41 dbo.Graduater_Business.EmployTime AS EmployTime, 42 dbo.Graduater_Business.Job AS Job, dbo.Graduater_Business.FillMan AS FillMan, 43 dbo.Graduater_Business.FillTime AS FillTime, 44 dbo.Graduater_Business.IsCommendOK AS IsCommendOK, 45 dbo.Graduater_Business.ApproveUser AS ApproveUser, 46 dbo.Graduater_Business.ApproveTime AS ApproveTime, 47 dbo.Graduater_Business.RegistTime AS RegistTime, 48 dbo.Graduater_Business.EmployCorp AS EmployCorp, 49 dbo.Graduater_Business.JobRemark AS JobRemark, 54 dbo.Person_Contact.Address AS Address, dbo.Person_Contact.Zip AS Zip, 55 dbo.Person_Contact.Telephone AS Telephone, dbo.Person_Contact.Mobile AS Mobile, 56 dbo.Person_Contact.Email AS Email, dbo.Person_Contact.IM AS IM, 57 dbo.Person_Skill.ForeignLanguage AS ForeignLanguage, 58 dbo.Person_Skill.ForeignLanguageLevel AS ForeignLanguageLevel, 59 dbo.Person_Skill.CantoneseLevel AS CantoneseLevel, 60 dbo.Person_Skill.MandarinLevel AS MandarinLevel, 61 dbo.Person_Skill.Language AS Language, 62 dbo.Person_Skill.TechnicalTitle AS TechnicalTitle, 63 dbo.Person_Skill.ComputerLevel AS ComputerLevel, 64 dbo.Person_EmployPurpose.JobType AS JobType, 65 dbo.Person_EmployPurpose.Vocation AS Vocation, 66 dbo.Person_EmployPurpose.JobPlace AS JobPlace, 67 dbo.Person_EmployPurpose.Salary AS Salary, 68 dbo.Person_EmployPurpose.OnJobDate AS OnJobDate, 69 dbo.Person_EmployPurpose.CorpType AS CorpType, 72 dbo.Graduater_Business.EmployType AS EmployType, 73 dbo.Graduater_Business.EmployTypeCode AS EmployTypeCode, 74 dbo.Graduater_Business.EmployCorpType AS EmployCorpType, 79 FROM dbo.Person_BasicInfo INNER JOIN 80 dbo.Graduater_Business ON 81 dbo.Person_BasicInfo.PersonID = dbo.Graduater_Business.PersonID LEFT OUTER JOIN 82 dbo.Graduater_GraduaterRegist ON 83 dbo.Graduater_Business.GradBusinessID = dbo.Graduater_GraduaterRegist.GraduaterGUID 84 INNER JOIN 85 dbo.Person_Contact ON 86 dbo.Person_BasicInfo.PersonID = dbo.Person_Contact.PersonID INNER JOIN 87 dbo.Person_Skill ON 88 dbo.Person_BasicInfo.PersonID = dbo.Person_Skill.PersonID INNER JOIN 89 dbo.Person_EmployPurpose ON 90 dbo.Person_BasicInfo.PersonID = dbo.Person_EmployPurpose.PersonID 91 GO 92 SET ANSI_NULLS OFF 93 GO 94 SET QUOTED_IDENTIFIER OFF 95 GO 3、 創(chuàng)建索引的視圖(執(zhí)行select * from Query_NoEmployRegist用時(shí)51s)
代碼 1 SET ANSI_NULLS on 2 GO 3 SET QUOTED_IDENTIFIER on 4 GO 5 6 ALTER VIEW [dbo].[Query_NoEmployRegist] 7 WITH SCHEMABINDING AS 8 SELECT 9 dbo.Person_BasicInfo.PersonID, 10 dbo.Person_BasicInfo.IdentityID, 11 dbo.Person_BasicInfo.Name, 12 dbo.Person_BasicInfo.Sex, 13 dbo.Person_BasicInfo.Folk, 14 dbo.Person_BasicInfo.Politics, 15 dbo.Person_BasicInfo.Birthday, 16 dbo.Person_BasicInfo.StudentSource, 17 dbo.Person_BasicInfo.StudentSourceCode, 18 dbo.Person_BasicInfo.EduLevel, 19 dbo.Person_BasicInfo.EduLevelCode, 20 dbo.Person_BasicInfo.EduNumber, 21 dbo.Person_BasicInfo.Stature, 22 dbo.Person_BasicInfo.Avoirdupois, 23 dbo.Person_BasicInfo.MarriageStatus, 24 dbo.Person_BasicInfo.College, 25 dbo.Person_BasicInfo.GraduatedDate, 26 dbo.Person_BasicInfo.Train, 27 dbo.Person_BasicInfo.Major, 28 dbo.Person_BasicInfo.Degree, 29 dbo.Person_BasicInfo.DegreeCertificate, 30 dbo.Person_BasicInfo.StudyMode, 31 dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO, 32 dbo.Graduater_GraduaterRegist.RegistTime AS BaoDaoTime, 33 dbo.Graduater_GraduaterRegist.RegistMan AS RegistMan, 34 dbo.Graduater_Business.ComeFrom AS ComeFrom, 35 dbo.Graduater_Business.Code AS Code, dbo.Graduater_Business.Status AS Status, 36 dbo.Graduater_Business.ApproveResult AS ApproveResult, 37 dbo.Graduater_Business.NewCorp AS NewCorp, 38 dbo.Graduater_Business.CommendNumber AS CommendNumber, 39 dbo.Graduater_Business.EmployStatus AS EmployStatus, 40 dbo.Graduater_Business.NewCommendTime AS NewCommendTime, 41 dbo.Graduater_Business.GetSource AS GetSource, 42 dbo.Graduater_Business.EmployTime AS EmployTime, 43 dbo.Graduater_Business.Job AS Job, dbo.Graduater_Business.FillMan AS FillMan, 44 dbo.Graduater_Business.FillTime AS FillTime, 45 dbo.Graduater_Business.IsCommendOK AS IsCommendOK, 46 dbo.Graduater_Business.ApproveUser AS ApproveUser, 47 dbo.Graduater_Business.ApproveTime AS ApproveTime, 48 dbo.Graduater_Business.RegistTime AS RegistTime, 49 dbo.Graduater_Business.EmployCorp AS EmployCorp, 50 dbo.Graduater_Business.JobRemark AS JobRemark, 51 dbo.Person_Contact.Address AS Address, dbo.Person_Contact.Zip AS Zip, 52 dbo.Person_Contact.Telephone AS Telephone, dbo.Person_Contact.Mobile AS Mobile, 53 dbo.Person_Contact.Email AS Email, dbo.Person_Contact.IM AS IM, 54 dbo.Person_Skill.ForeignLanguage AS ForeignLanguage, 55 dbo.Person_Skill.ForeignLanguageLevel AS ForeignLanguageLevel, 56 dbo.Person_Skill.CantoneseLevel AS CantoneseLevel, 57 dbo.Person_Skill.MandarinLevel AS MandarinLevel, 58 dbo.Person_Skill.Language AS Language, 59 dbo.Person_Skill.TechnicalTitle AS TechnicalTitle, 60 dbo.Person_Skill.ComputerLevel AS ComputerLevel, 61 dbo.Person_EmployPurpose.JobType AS JobType, 62 dbo.Person_EmployPurpose.Vocation AS Vocation, 63 dbo.Person_EmployPurpose.JobPlace AS JobPlace, 64 dbo.Person_EmployPurpose.Salary AS Salary, 65 dbo.Person_EmployPurpose.OnJobDate AS OnJobDate, 66 dbo.Person_EmployPurpose.CorpType AS CorpType, 67 dbo.Person_EmployPurpose.Job AS RequireJob, 68 dbo.Graduater_Business.EmployType AS EmployType, 69 dbo.Graduater_Business.EmployTypeCode AS EmployTypeCode, 70 dbo.Graduater_Business.EmployCorpType AS EmployCorpType, 71 FROM dbo.Person_BasicInfo INNER JOIN 72 dbo.Graduater_Business ON 73 dbo.Person_BasicInfo.PersonID = dbo.Graduater_Business.PersonID INNER JOIN 74 dbo.Graduater_GraduaterRegist ON 75 dbo.Graduater_Business.GradBusinessID = dbo.Graduater_GraduaterRegist.GraduaterGUID 76 INNER JOIN 77 dbo.Person_Contact ON 78 dbo.Person_BasicInfo.PersonID = dbo.Person_Contact.PersonID INNER JOIN 79 dbo.Person_Skill ON 80 dbo.Person_BasicInfo.PersonID = dbo.Person_Skill.PersonID INNER JOIN 81 dbo.Person_EmployPurpose ON 82 dbo.Person_BasicInfo.PersonID = dbo.Person_EmployPurpose.PersonID 83 GO 84 CREATE UNIQUE CLUSTERED INDEX Query_NoEmployRegist_Ind 85 ON Query_NoEmployRegist(GraduatedDate, StudentSourceCode,RegistTime,ApproveTime,PrintTime,ComeFrom) 86 SET ANSI_NULLS ON 87 GO 88 SET QUOTED_IDENTIFIER ON 89 GO
看來還得優(yōu)化,希望各位博友指點(diǎn)一下!
二、索引視圖的學(xué)習(xí)總結(jié)
1、什么是索引視圖?
在視圖上創(chuàng)建唯一的聚集索引及非聚集索引,來提高最復(fù)雜的查詢的數(shù)據(jù)訪問性能。具有唯一的聚集索引的視圖即為索引視圖。從數(shù)據(jù)庫管理系統(tǒng) (DBMS) 的角度看來,視圖是對(duì)數(shù)據(jù)(一種元數(shù)據(jù)類型)的一種描述。當(dāng)創(chuàng)建了一個(gè)典型視圖時(shí),通過封裝一個(gè) SELECT 語句(定義一個(gè)結(jié)果集來表示為虛擬表)來定義元數(shù)據(jù)。當(dāng)在另一個(gè)查詢的 FROM 子句中引用視圖時(shí),將從系統(tǒng)目錄檢索該元數(shù)據(jù),并替代該視圖的引用擴(kuò)展元數(shù)據(jù)。視圖擴(kuò)展之后,SQL Server 查詢優(yōu)化器會(huì)為執(zhí)行查詢編譯一個(gè)執(zhí)行計(jì)劃。查詢優(yōu)化器會(huì)搜索針對(duì)某個(gè)查詢的一組可能的執(zhí)行計(jì)劃,并根據(jù)對(duì)執(zhí)行每個(gè)查詢計(jì)劃所需的實(shí)際時(shí)間的估計(jì),選擇所能找到的成本最低的計(jì)劃。
SQL Server 查詢優(yōu)化器自動(dòng)決定何時(shí)對(duì)給定的查詢執(zhí)行使用索引視圖。不必在查詢中直接引用視圖以供優(yōu)化器在查詢執(zhí)行計(jì)劃中使用。所以,現(xiàn)有的應(yīng)用程序可運(yùn)用索引視圖,而不用更改應(yīng)用程序本身;只是必須創(chuàng)建索引視圖。
優(yōu)化器考慮事項(xiàng)
查詢優(yōu)化器通過考慮幾個(gè)條件來決定索引視圖能否涵蓋整個(gè)或部分查詢。這些條件對(duì)應(yīng)查詢中的一個(gè) FROM 子句并由下列這幾個(gè)部分組成:
• 如果與其他謂詞所匹配的行的超集相匹配,那么該謂詞將歸入另一個(gè)謂詞。例如,“T.a=10”歸入“T.a=10 and T.b=20”。任何謂詞都可歸入其自身。視圖中限 制表值的那部分謂詞必須歸入查詢中限制相同表的那部分謂詞。此外,必須以 SQL Server 可驗(yàn)證的方式實(shí)現(xiàn)這一點(diǎn)。
情況 (1) 和 (2) 允許 SQL Server 對(duì)視圖的列應(yīng)用查詢謂詞,以便進(jìn)一步限制視圖的列。情況 (3) 比較特殊。在這種情況下,不需要對(duì)列進(jìn)行篩選,因此該列不必出現(xiàn)在視圖中。 如果查詢不止包含一個(gè) FROM 子句(子查詢、派生表、UNION),優(yōu)化器可能選擇幾個(gè)索引視圖來處理查詢,并將它們應(yīng)用到不同 FROM 子句。