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左右数据。其他的表大概就几百条数据
1.查询出来的结果集应该不多吧,你可以先把数据查询出来后,在程序里面做排序
2.或者是用临时表存储查询结果,然后再排序
对需要order by的字段建立好索引就不会好慢了
sql查询可以说排序是最耗时的,诚如楼上所说1、对排序字段建立索引;2、优化where语句减小数据集
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
试下这句看看,
类似的问题也困扰我一段时间了,不过我找到了终极解决办法。
select配合order by时,select后面查询的字段越多,性能越差。
解决办法是查2次:第1次先select 主表id from ... order by ...,从而定位出主表id,第2次再根据第1步的主表id批量查出剩余字段,补全即可;亲测效率大大提升!