首页 新闻 会员 周边 捐助

有人精通sql 语句优化?

0
悬赏园豆:10 [已解决问题] 解决于 2020-01-17 17:37

select *  FROM (select id,name,areaname2,userlevel from ads) T order by id desc这是用动软软件生成的查询方法,是被临时存为一个临时表的。这样的sql语句性能高吗?还是就这样的简单查询语句比较好?select id,name,areaname2,userlevel from ads order by id desc

泡沫_之夏的主页 泡沫_之夏 | 初学一级 | 园豆:110
提问于:2016-01-27 11:05
< >
分享
最佳答案
0

一:select id,name,areaname2,userlevel from ads order by id desc

效率肯定比

二:select *  FROM (select id,name,areaname2,userlevel from ads) T order by id desc

一是,先查询,最后排序

二是,先查询,在查询(这步是多余的,同意的内容,做了二遍),最后排序

收获园豆:5
大志若愚 | 老鸟四级 |园豆:2138 | 2016-01-27 14:35

可是动软代码生成的sql都是查询完弄成临时表T然后再查询。

泡沫_之夏 | 园豆:110 (初学一级) | 2016-01-27 16:29

@泡沫_之夏: 动软是为了通用,所以才这么写的

大志若愚 | 园豆:2138 (老鸟四级) | 2016-01-29 09:45

@泡沫_之夏: 而且用动软生成的代码本身就已经牺牲了一定的效率

大志若愚 | 园豆:2138 (老鸟四级) | 2016-01-29 09:46
其他回答(2)
0

测试了下。数据量为30条;下图为结果。

收获园豆:2
Ctrl` | 园豆:3317 (老鸟四级) | 2016-01-27 11:18
0

第一种写法  

(10304 行受影响)
表 'YY_PB'。扫描计数 1,逻辑读取 513 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 14 毫秒。

 

第二种写法

(10304 行受影响)
表 'YY_PB'。扫描计数 1,逻辑读取 513 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
CPU 时间 = 16 毫秒,占用时间 = 218 毫秒。

 

很明显它们的IO开销是一样的,因为查询数据是一样的,

区别在于生成的执行计划,然后执行 这个计划所花的时间是不一样的,因为两种写法的sql不一样复杂度也不一样

收获园豆:3
Zery | 园豆:6151 (大侠五级) | 2016-01-28 18:04

C#分页你是用ROW_NUMBER() OVER ?

支持(0) 反对(0) 泡沫_之夏 | 园豆:110 (初学一级) | 2016-01-29 09:50

你这个是咋么测的啊? 软件?

 

(10304 行受影响)
表 'YY_PB'。扫描计数 1,逻辑读取 513 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 14 毫秒。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-02-05 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册