如何优化这个查询??
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左边的最好不用函数,当然有函数索引是可以的;条件的索引顺序等等。
楼主只有自己测试了。