这条sql语句,查询总记录数只有3万多条,但是用了整整1分多钟,请问各位老师们,我该怎么改动优化呢?自己试了加索引,但是效果不明显
10 个解决方案
#1
[这个可能时候发到 sql版块。
, 光给这个是没办法优化的, 要知道,测试出你那个关联,占用大量时间,还得知道你目前表的数据量,才能处理, 看下你的执行计划,是否真正用到了索引, 执行计划教会我如何创建索引?, 先加上 With(nolock) 脏读看看是不是数据表写入频繁导致的。
然后就是你要知道select 30000条的数据展示出来也是要时间的,所以你加个Top100看看速度。
最后就是加索引等老一套了,没别的办法。
, 如此简单的一个基本查询语句,有个毛线的优化。。。。。
关键是你为什么要拿30000多条结果????
这么大的结果集,从服务器上拿下来本身就是需要时间的,
因为数据库需要时间组织数据并转成数据流,而接收端也需要时间解析数据流分配空间格式化数据, 首先索引要加在A.TR_EmpID,B.EMPLOYEEID,A.TR_ID,TE.TR_ID,TE.TR_EMPID这些列上
可以这样优化
, 几个视图和表的数据量都很大,你做全表查询就会很费时
如果没必要查询出全部数据的话,建议使用分页查询。或者加个索引。, 由于需求,不能延迟加载或者分页, 是SQL SERVER 数据库么?建议先用自带的sql server profiler 和 数据库引擎优化顾问 工具 来优化一下。]
, 光给这个是没办法优化的, 要知道,测试出你那个关联,占用大量时间,还得知道你目前表的数据量,才能处理, 看下你的执行计划,是否真正用到了索引, 执行计划教会我如何创建索引?, 先加上 With(nolock) 脏读看看是不是数据表写入频繁导致的。
然后就是你要知道select 30000条的数据展示出来也是要时间的,所以你加个Top100看看速度。
最后就是加索引等老一套了,没别的办法。
, 如此简单的一个基本查询语句,有个毛线的优化。。。。。
关键是你为什么要拿30000多条结果????
这么大的结果集,从服务器上拿下来本身就是需要时间的,
因为数据库需要时间组织数据并转成数据流,而接收端也需要时间解析数据流分配空间格式化数据, 首先索引要加在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
, 几个视图和表的数据量都很大,你做全表查询就会很费时
如果没必要查询出全部数据的话,建议使用分页查询。或者加个索引。, 由于需求,不能延迟加载或者分页, 是SQL SERVER 数据库么?建议先用自带的sql server profiler 和 数据库引擎优化顾问 工具 来优化一下。]
#1
[这个可能时候发到 sql版块。
, 光给这个是没办法优化的, 要知道,测试出你那个关联,占用大量时间,还得知道你目前表的数据量,才能处理, 看下你的执行计划,是否真正用到了索引, 执行计划教会我如何创建索引?, 先加上 With(nolock) 脏读看看是不是数据表写入频繁导致的。
然后就是你要知道select 30000条的数据展示出来也是要时间的,所以你加个Top100看看速度。
最后就是加索引等老一套了,没别的办法。
, 如此简单的一个基本查询语句,有个毛线的优化。。。。。
关键是你为什么要拿30000多条结果????
这么大的结果集,从服务器上拿下来本身就是需要时间的,
因为数据库需要时间组织数据并转成数据流,而接收端也需要时间解析数据流分配空间格式化数据, 首先索引要加在A.TR_EmpID,B.EMPLOYEEID,A.TR_ID,TE.TR_ID,TE.TR_EMPID这些列上
可以这样优化
, 几个视图和表的数据量都很大,你做全表查询就会很费时
如果没必要查询出全部数据的话,建议使用分页查询。或者加个索引。, 由于需求,不能延迟加载或者分页, 是SQL SERVER 数据库么?建议先用自带的sql server profiler 和 数据库引擎优化顾问 工具 来优化一下。]
, 光给这个是没办法优化的, 要知道,测试出你那个关联,占用大量时间,还得知道你目前表的数据量,才能处理, 看下你的执行计划,是否真正用到了索引, 执行计划教会我如何创建索引?, 先加上 With(nolock) 脏读看看是不是数据表写入频繁导致的。
然后就是你要知道select 30000条的数据展示出来也是要时间的,所以你加个Top100看看速度。
最后就是加索引等老一套了,没别的办法。
, 如此简单的一个基本查询语句,有个毛线的优化。。。。。
关键是你为什么要拿30000多条结果????
这么大的结果集,从服务器上拿下来本身就是需要时间的,
因为数据库需要时间组织数据并转成数据流,而接收端也需要时间解析数据流分配空间格式化数据, 首先索引要加在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
, 几个视图和表的数据量都很大,你做全表查询就会很费时
如果没必要查询出全部数据的话,建议使用分页查询。或者加个索引。, 由于需求,不能延迟加载或者分页, 是SQL SERVER 数据库么?建议先用自带的sql server profiler 和 数据库引擎优化顾问 工具 来优化一下。]