solorez~Z Space

关注数据库,关注MS SQL Server

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

记一次SQL索引优化

目标优化语句:

复制代码

SELECT TOP 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],'经理') OR CONTAINS([UserResume].[ResumeName],'简历'))
复制代码

 

第一次执行:没有建立任何索引。

执行效果:

'Worktable'。扫描计数 0,逻辑读取 0

表 'UserResume'。扫描计数 1,逻辑读取 18524 次

表 'WorkExperience'。扫描计数 1,逻辑读取 8679 次

(1 行受影响)

 SQL Server 执行时间:

   CPU 时间 = 2152 毫秒,占用时间 = 3126 毫秒。

第二次执行:

查看执行计划WorkExperience表是表扫描,建立IX_WorkExperience索引(ID列和JOIN 参照的ID列上)

调整后效果:

'WorkExperience'。扫描计数 1,逻辑读取 1071

'UserResume'。扫描计数 1,逻辑读取 18524

(1 行受影响)

 SQL Server 执行时间:

   CPU 时间 = 1638 毫秒,占用时间 = 2045 毫秒。

第三次执行:

  查看执行计划,UserResume表是表扫描,建立IX_UserResume索引。

  调整后效果:

'WorkExperience'。扫描计数 11,逻辑读取 48

'UserResume'。扫描计数 1,逻辑读取 3095

(1 行受影响)

 SQL Server 执行时间:

   CPU 时间 = 1248 毫秒,占用时间 = 1568 毫秒。

第四次执行:

  查看执行计划,在IX_UserResume索引扫描后,产生了createtime列的重新排序,调整了IX_UserResume索引中createtime的位置和排序规则。

  调整后效果:

(50 行受影响)

'WorkExperience'。扫描计数 11,逻辑读取 48

'UserResume'。扫描计数 1,逻辑读取 3

(1 行受影响)

 SQL Server 执行时间:

   CPU 时间 = 15 毫秒,占用时间 = 404 毫秒。

 

posted on   付博  阅读(1188)  评论(2编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示