sql语句性能优化

L_aliao6 2018-01-22 02:27:40
SELECT A.ID, A.TR_EmpID, A.TR_EmpCode, A.TR_EmpName, A.TR_EmpNumber, A.TR_CourseID, A.TR_CourseCode, A.TR_CourseName, A.TR_CourseValidDateStr, A.TR_CourseValidDate,A.TR_ID, TR_Code, A.TR_Name, A.TR_StartDate, A.TR_EndDate, A.TR_Content, A.TR_OrgName, A.TR_Mode, A.TR_Category, A.TR_SumCourseTime, A.TR_Score, A.TR_Result,A.TR_TechersName, A.TR_HasReatTR, A.TR_DepID, A.TR_DepName, A.TR_RecordSource, A.TR_RecordDate, A.TR_RecordStatus, A.TEACHERTYPE, A.isdeleted,B.JOINCOMPANTTIME,B.OUTCOMPANTTIME,B.EMPSTATUS,B.STATUSNAME,TE.ID AS TEID FROM View_TRAINNING_RECORD A JOIN View_Employee B ON A.TR_EmpID=B.EMPLOYEEID LEFT JOIN dbo.TRAINNING_EMPS TE ON A.TR_ID=TE.TR_ID AND A.TR_EmpID=TE.TR_EMPID

这条sql语句,查询总记录数只有3万多条,但是用了整整1分多钟,请问各位老师们,我该怎么改动优化呢?自己试了加索引,但是效果不明显
...全文
2296 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason_Mao1 2018-02-26
  • 打赏
  • 举报
回复
你这是两个视图的连接查询,目前看不出来要怎么优化,建议你检查一下 关键索引 。或者是减少一些不必要查询的字段。
Nick_Ngai 2018-02-23
  • 打赏
  • 举报
回复
1.表看看有没有建立索引。 2.View_Employee你这个是视图吧,看看视图里面是不是应该优化下,有些视图单独查还可以,关联起来就很慢
wind_msh 2018-02-23
  • 打赏
  • 举报
回复
1. 可以先看一下actual execution plan,看看时间到底是在哪里耗费的, 2. 然后看看SQL server managemetn studio 给什么优化建议. 3. 3万条数据的确是太多了,不知道是否有这个必要
qq_32501391 2018-02-23
  • 打赏
  • 举报
回复
试试下面的
SELECT A.ID, A.TR_EmpID, A.TR_EmpCode, A.TR_EmpName, A.TR_EmpNumber, A.TR_CourseID, A.TR_CourseCode, A.TR_CourseName, 
	A.TR_CourseValidDateStr, A.TR_CourseValidDate,A.TR_ID, TR_Code, A.TR_Name, A.TR_StartDate, A.TR_EndDate, A.TR_Content, 
	A.TR_OrgName, A.TR_Mode, A.TR_Category, A.TR_SumCourseTime, A.TR_Score, A.TR_Result,A.TR_TechersName, A.TR_HasReatTR, 
	A.TR_DepID, A.TR_DepName, A.TR_RecordSource, A.TR_RecordDate, A.TR_RecordStatus, A.TEACHERTYPE, A.isdeleted,B.JOINCOMPANTTIME,
	B.OUTCOMPANTTIME,B.EMPSTATUS,B.STATUSNAME,TE.ID AS TEID 
FROM View_TRAINNING_RECORD A,View_Employee B,dbo.TRAINNING_EMPS TE
WHERE A.TR_EmpID=B.EMPLOYEEID AND A.TR_ID=TE.TR_ID AND A.TR_EmpID=TE.TR_EMPID
闭包客 2018-02-22
  • 打赏
  • 举报
回复
很多人觉得优化 SQL 语句就可以提升性能,其实在表设计的时候,就已经决定了绝大部分的性能表现了。 SQL 的性能问题,是要从表设计入手的。
  • 打赏
  • 举报
回复
你可以先返回 count(*) 统计结果,来测试一下到底是“查询”问题还是“序列化与传输”问题造成的。通常只应该查询出几十条数据用来显示。
kingjt2015 2018-02-22
  • 打赏
  • 举报
回复
关键视图:View_TRAINNING_RECORD 、View_Employee 、TRAINNING_EMPS 关联字段:TR_EmpID、EMPLOYEEID 、TR_ID 第一,查询的View_Employee 是否在Employee表里面都包含,如果包含,则不必要用视图,直接用对应的表,减少关联表也可以提高查询速度 第二,检查你的View_TRAINNING_RECORD 视图,看是否可以优化,单从这里面看没有什么问题,需要则视图里面关联查询字段建立索引,有可能掉了一个对效率的影响非常大。
Terry12 2018-02-02
  • 打赏
  • 举报
回复
是SQL SERVER 数据库么?建议先用自带的sql server profiler 和 数据库引擎优化顾问 工具 来优化一下。
yaotomo 2018-01-23
  • 打赏
  • 举报
回复
几个视图和表的数据量都很大,你做全表查询就会很费时 如果没必要查询出全部数据的话,建议使用分页查询。或者加个索引。
L_aliao6 2018-01-23
  • 打赏
  • 举报
回复
由于需求,不能延迟加载或者分页
秋的红果实 2018-01-22
  • 打赏
  • 举报
回复
首先索引要加在A.TR_EmpID,B.EMPLOYEEID,A.TR_ID,TE.TR_ID,TE.TR_EMPID这些列上 可以这样优化

SELECT ...
FROM
  (SELECT ... 
   FROM View_TRAINNING_RECORD A,View_Employee B
   WHERE  A.TR_EmpID=B.EMPLOYEEID) T
  LEFT JOIN 
  dbo.TRAINNING_EMPS TE ON  T.TR_ID=TE.TR_ID AND T.TR_EmpID=TE.TR_EMPI

丰云 2018-01-22
  • 打赏
  • 举报
回复
如此简单的一个基本查询语句,有个毛线的优化。。。。。 关键是你为什么要拿30000多条结果???? 这么大的结果集,从服务器上拿下来本身就是需要时间的, 因为数据库需要时间组织数据并转成数据流,而接收端也需要时间解析数据流分配空间格式化数据
  • 打赏
  • 举报
回复
先加上 With(nolock) 脏读看看是不是数据表写入频繁导致的。 然后就是你要知道select 30000条的数据展示出来也是要时间的,所以你加个Top100看看速度。 最后就是加索引等老一套了,没别的办法。
  • 打赏
  • 举报
回复
看下你的执行计划,是否真正用到了索引,执行计划教会我如何创建索引?
正怒月神 版主 2018-01-22
  • 打赏
  • 举报
回复
这个可能时候发到 sql版块。
开水加面包 2018-01-22
  • 打赏
  • 举报
回复
要知道,测试出你那个关联,占用大量时间,还得知道你目前表的数据量,才能处理
开水加面包 2018-01-22
  • 打赏
  • 举报
回复
光给这个是没办法优化的

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧