请问下面两句语句查询执行效率有啥不同吗?如何优化呢

昵称是可以中文吗 2017-03-31 09:41:29
创建一张学生表,要查找出里面成绩最高和成绩最低的学生成绩;写了下面两种方式:

select max(score),min(score) from student;


另外一种是:

select max(score) from student;
select min(score) from student;


查了网上说推荐用第二种,效率高一点,因为第一种无法同时扫描索引。但是第二种两次查询无法办证数据一致,可以用笛卡尔积;请问该如何改写?
...全文
376 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg5211314 2017-04-01
  • 打赏
  • 举报
回复
测试120w数据,好像还是第一种快一些
zbdzjx 2017-04-01
  • 打赏
  • 举报
回复
score有没有索引? 我试了一下,3343612条记录。 在没有索引的情况下,三个语句轮流执行,一共三次,第一条的时间是13秒、11秒、8秒,第二条的时间是11秒、8秒、6秒,第三条的时间是16秒、9秒、6秒。 而用二楼的语句,就要20秒左右。 在有索引的情况下,第一条时间750毫秒以上,第二条时间是300毫秒左右,第三条时间是250毫秒左右。 而用二楼的语句,则是250毫秒不到。 不知什么原因,开始时,第一条时间都是不到1秒,执行了其他一些语句后,再执行第一条语句,时间居然达到3、4秒以上了,而其他三条执行时间差异不大。
壹四 2017-03-31
  • 打赏
  • 举报
回复
第一种就已经可以了吧。
js14982 2017-03-31
  • 打赏
  • 举报
回复
引用 4 楼 LinBilin_ 的回复:
[quote=引用 2 楼 js14982 的回复:]
select ma,mi from
(select max(score) ma from student) a,
(select min(score) mi from student) b
第二种,把2个查询做成子查询就可以了
一个简单的查询,非得这么写么?[/quote]我觉得select max(score),min(score) from student;就挺好的。
  • 打赏
  • 举报
回复
引用 2 楼 js14982 的回复:
select ma,mi from
(select max(score) ma from student) a,
(select min(score) mi from student) b
第二种,把2个查询做成子查询就可以了
一个简单的查询,非得这么写么?
Diza1986 2017-03-31
  • 打赏
  • 举报
回复
怎么都觉得第一种不会比第二种差
js14982 2017-03-31
  • 打赏
  • 举报
回复
select ma,mi from
(select max(score) ma from student) a,
(select min(score) mi from student) b
第二种,把2个查询做成子查询就可以了
js14982 2017-03-31
  • 打赏
  • 举报
回复
就用第一种呗,何必纠结这个,第二钟还要扫描2次表呢
IT职场成长课 2017-03-31
  • 打赏
  • 举报
回复
别光看网上说,自己动手对比下两个执行速度不是更靠谱么
sxq129601 2017-03-31
  • 打赏
  • 举报
回复
不知道为什么说第2种会比第1种块,明显第1种块啊,扫描1次全表就OK

3,497

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧