首页 新闻 会员 周边

SQL Server 联查 加上order by 执行速度好慢

0
悬赏园豆:20 [已解决问题] 解决于 2015-10-30 11:23

select
u.cncEmployeeID
,u.cnvcName uName,u.cnvcAccount
,u.cnvcLevel
,j.cniOrder
,j.cnvcJob
,u.cniOrganId
,cnvcHeadImg,o1.cnvcName oName,o1.cniNodeID

from tbLeaderJob j inner join tbuser u on j.cncEmployeeId=u.cncEmployeeId
inner join tbOrgan o1 on u.cniOrganId =cniNodeID inner join tbLeaderPermissions on j.cncEmployeeId=cncUserID
where j.cncState='1' order by j.cniOrder desc  
加上排序就好慢,不加就秒开。求大神解答
tbuser  、tbOrgan  大概有10w左右数据。其他的表大概就几百条数据

_jie的主页 _jie | 初学一级 | 园豆:116
提问于:2015-03-31 16:24
< >
分享
最佳答案
0

1.查询出来的结果集应该不多吧,你可以先把数据查询出来后,在程序里面做排序

2.或者是用临时表存储查询结果,然后再排序

收获园豆:10
maanshancss | 菜鸟二级 |园豆:303 | 2015-03-31 16:31
其他回答(4)
0

对需要order by的字段建立好索引就不会好慢了

收获园豆:5
519740105 | 园豆:5810 (大侠五级) | 2015-03-31 16:44
0

sql查询可以说排序是最耗时的,诚如楼上所说1、对排序字段建立索引;2、优化where语句减小数据集

i迷倪 | 园豆:185 (初学一级) | 2015-04-01 13:08
0

WITH J
(
 SELECT j.cniOrder,j.cnvcJob, j.cncEmployeeId
 FROM tbLeaderJob J
 WHERE  j.cncState='1'
 ORDER BY j.cniOrder desc 
)
SELECT 
u.cncEmployeeID
,u.cnvcName uName,u.cnvcAccount
,u.cnvcLevel
,j.cniOrder
,j.cnvcJob
,u.cniOrganId
,cnvcHeadImg,o1.cnvcName oName,o1.cniNodeID
FROM J
inner join tbuser u on j.cncEmployeeId=u.cncEmployeeId
inner join tbOrgan o1 on u.cniOrganId =cniNodeID inner join tbLeaderPermissions on j.cncEmployeeId=cncUserID

 

试下这句看看,

收获园豆:5
Yurbin | 园豆:76 (初学一级) | 2015-05-25 10:58
0

类似的问题也困扰我一段时间了,不过我找到了终极解决办法。

select配合order by时,select后面查询的字段越多,性能越差。

解决办法是查2次:第1次先select 主表id from ... order by ...,从而定位出主表id,第2次再根据第1步的主表id批量查出剩余字段,补全即可;亲测效率大大提升!

Java烘焙师 | 园豆:202 (菜鸟二级) | 2017-09-27 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册