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
一: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
高
一是,先查询,最后排序
二是,先查询,在查询(这步是多余的,同意的内容,做了二遍),最后排序
可是动软代码生成的sql都是查询完弄成临时表T然后再查询。
@泡沫_之夏: 动软是为了通用,所以才这么写的
@泡沫_之夏: 而且用动软生成的代码本身就已经牺牲了一定的效率
测试了下。数据量为30条;下图为结果。
第一种写法
(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不一样复杂度也不一样
C#分页你是用ROW_NUMBER() OVER ?
你这个是咋么测的啊? 软件?
(10304 行受影响)
表 'YY_PB'。扫描计数 1,逻辑读取 513 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 14 毫秒。