SQL索引優(yōu)化方法(實例代碼)

字號:

SELECT 50
    ROW_NUMBER() OVER(ORDER BY ResumeCreateTime DESC) as [RowID]
    ,[TopDegree]
    ,[DegreeRankID]
    ,[UserResume].[UserResumeID]
    ,[UserResume].[UserID]
    ,[ResumeName]
    ,[BirthDate]
    ,[WorkStartedDate]
    ,[SalaryNeeded]
    ,[BufferTimeSpanID]
    ,[ResumeCreateTime]
    FROM [dbo].[UserResume] INNER JOIN [dbo].[WorkExperience] ON [WorkExperience].[UserResumeID] = [UserResume].[UserResumeID]
    WHERE
    (CONTAINS([WorkExperience].[WorkSummary],'經(jīng)理') OR CONTAINS([UserResume].[ResumeName],'簡歷'))
    第一次執(zhí)行:
    沒有建立任何索引。
    執(zhí)行效果:
    表 'Worktable'。掃描計數(shù) 0,邏輯讀取 0 次
    表 'UserResume'。掃描計數(shù) 1,邏輯讀取 18524 次
    表 'WorkExperience'。掃描計數(shù) 1,邏輯讀取 8679 次
    (1 行受影響)
    SQL Server 執(zhí)行時間:
    CPU 時間 = 2152 毫秒,占用時間 = 3126 毫秒。
    第二次執(zhí)行:
    查看執(zhí)行計劃WorkExperience表是表掃描,建立IX_WorkExperience索引(在ID列和JOIN 參照的ID列上)。
    調(diào)整后效果:
    表 'WorkExperience'。掃描計數(shù) 1,邏輯讀取 1071 次
    表 'UserResume'。掃描計數(shù) 1,邏輯讀取 18524 次
    (1 行受影響)
    SQL Server 執(zhí)行時間:
    CPU 時間 = 1638 毫秒,占用時間 = 2045 毫秒。
    第三次執(zhí)行:
    查看執(zhí)行計劃,UserResume表是表掃描,建立IX_UserResume索引。
    調(diào)整后效果:
    表 'WorkExperience'。掃描計數(shù) 11,邏輯讀取 48 次
    表 'UserResume'。掃描計數(shù) 1,邏輯讀取 3095 次
    (1 行受影響)
    SQL Server 執(zhí)行時間:
    CPU 時間 = 1248 毫秒,占用時間 = 1568 毫秒。
    第四次執(zhí)行:
    查看執(zhí)行計劃,在IX_UserResume索引掃描后,產(chǎn)生了createtime列的重新排序,調(diào)整了IX_UserResume索引中createtime的位置和排序規(guī)則。
    調(diào)整后效果:
    (50 行受影響)
    表 'WorkExperience'。掃描計數(shù) 11,邏輯讀取 48 次
    表 'UserResume'。掃描計數(shù) 1,邏輯讀取 3 次
    (1 行受影響)
    SQL Server 執(zhí)行時間:
    CPU 時間 = 15 毫秒,占用時間 = 404 毫秒。