日期:2014-05-19  浏览次数:20577 次

如何优化这个查询??
select     dbo.comlevel(c_name,getdate()),bb,c_name,id,j_code,j_position,c_com,j_jobtotal,j_sex,j_degree,j_major,j_jobprovince,j_jobcity   from   v_com where   j_state   =   'sd '   and   c_islock   =   'wy '   and   dateadd(month,CAST(j_jobtime   as   int),j_addtime)> =getdate()   ORDER   BY   dbo.c_corder(c_name,   GETDATE(),0),bb   desc

如何优化这个查询???才三千多数据速度太慢受不了,v_com是试图,dbo.c_corder,dbo.comlevel是函数


------解决方案--------------------
如果函数c_corder是递增或递减的话,把
ORDER BY dbo.c_corder(c_name, GETDATE(),0),bb desc,
改为
ORDER BY c_name,bb desc
可以吗
------解决方案--------------------
查询速度慢的原因很多,操作系统的配置,数据库资源,等, 不 一定是语句的问题, 不过有的时候复杂的语句确实会使得查询速度慢,但是我看你的语句不是很复杂
如果是语句的问题我觉得你可以看下是那部分出了问题, 是函数那部分还是其他,
如果还慢2的话, 你可以试试加索引,如果你的表的字段多的话,也会影响速度的
------解决方案--------------------
尽量不用函数,用子查询来代替.
还有就是where 语中尽量不要在等式的左边用公式,比如:
dateadd(month,CAST(j_jobtime as int),j_addtime)> =getdate()

change to :
j_addtime> =dateadd(month,-cast(j_jobtime),getdate())
------解决方案--------------------
查询速度慢原因也有很多,不如使用了不合理的索引,或者根本没有使用索引;还有where左边的最好不用函数,当然有函数索引是可以的;条件的索引顺序等等。
楼主只有自己测试了。