2条结果相同的sql语句,请问那条效率比较好,求解释...

liuzhengkang 2011-08-13 10:26:19
如题,下面2条语句的执行结果都是一样的,我想知道那条效率比较高,求各位大哥解释...
第一条:

select a.roleId,a.armyId,a.battle,
e.infantry,e.cavalry,e.artillery,
m.reserve,m.reserveMax
from yl_roleadjutant a
left join yl_roleEquip e on a.roleId = e.roleId
left join yl_roleArmy m on a.roleId = m.roleId
where a.id=100;

第二条:

select a.roleId,a.armyId,a.battle,
e.infantry,e.cavalry,e.artillery,
m.reserve,m.reserveMax
from (select roleId,armyId,battle from yl_roleadjutant where id=100) a
left join yl_roleEquip e on a.roleId = e.roleId
left join yl_roleArmy m on a.roleId = m.roleId;

...全文
201 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
chtzhking 2011-08-15
  • 打赏
  • 举报
回复
 在EXPLAIN命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。在各种类型的关联关系当中,效率最高的是system,然后依次是const、eq_ref、ref、range、index和All(All的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍——这种情况往往可以用一索引来避免)
晓风斜阳 2011-08-15
  • 打赏
  • 举报
回复
SQL SERVER Management Studio 右下角有显示,自己看....
chtzhking 2011-08-15
  • 打赏
  • 举报
回复
13楼的贴图分析,应该是第一种效率高一些
liuzhengkang 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 chtzhking 的回复:]

 在EXPLAIN命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。在各种类型的关联关系当中,效率最高的是system,然后依次是const、eq_ref、ref、range、index和All(All的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍——这种情况往往可……
[/Quote]
谢谢各位大哥,请问从13楼的 执行计划的结果来看,那一条效率比较好。单从这执行计划结果能看出来吗?
表的记录是 yl_roleadjutant最多, yl_roleEquip和yl_roleArmy相等,
比如yl_roleadjutant:10万条,yl_roleEquip、yl_roleArmy都有只5万条。
这3张表,只有设置了主键,是自增id。
rfq 2011-08-15
  • 打赏
  • 举报
回复
应该是第一次条
zxjnew 2011-08-15
  • 打赏
  • 举报
回复
应该是第二个,sql的处理机制是从后向前,你首先来的条件能过滤大部分数据的化后面的查询时间就更短。
p2c2009 2011-08-15
  • 打赏
  • 举报
回复
全表索引。。。
liuzhengkang 2011-08-13
  • 打赏
  • 举报
回复
找不到MYSQL版块。。
G.spring 2011-08-13
  • 打赏
  • 举报
回复
MYSQL?这里不是MSSQL?
liuzhengkang 2011-08-13
  • 打赏
  • 举报
回复
这3张表,没有建索引那些,都是设置了自增id,且自增id为主键。
不知主键算不算索引?
快溜 2011-08-13
  • 打赏
  • 举报
回复
好像没什么区别,你这个信息好少。
xueyong4712816 2011-08-13
  • 打赏
  • 举报
回复
把两条语句放在一起 执行看谁用的时间短
liuzhengkang 2011-08-13
  • 打赏
  • 举报
回复
执行计划的结果是这样的,不会看,帮忙分析下


快溜 2011-08-13
  • 打赏
  • 举报
回复
都有优点,如果有索引,那么在yl_roleadjutant表数据量少的情况下,第一条好一点,
yl_roleadjutant表数据量大的时候,第二个反而会快一些,
mssqlserver的查询优化器是这样的,不知道mysql的查询优化器如何,。
勿勿 2011-08-13
  • 打赏
  • 举报
回复
看下计划就知道了。
geniuswjt 2011-08-13
  • 打赏
  • 举报
回复
ctrl+l一下
xueyong4712816 2011-08-13
  • 打赏
  • 举报
回复
http://hi.baidu.com/zhengguowang/blog/item/8c7b248ec7feaaf2513d92f1.html
xueyong4712816 2011-08-13
  • 打赏
  • 举报
回复
mssql 是CTRL + L
貌似两者效率一样
AcHerat 元老 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liuzhengkang 的回复:]

数据库是mysql,不知道要怎么才能知道那个效率好,俺是菜鸟..
[/Quote]

MYSQL? 这个要去问问MYSQL版块了,在其他数据库那里,MYSQL和MSSQL不同的,不过效率估计也差不了多少。
叶子 2011-08-13
  • 打赏
  • 举报
回复
2中情况一起执行看执行计划的开销情况
加载更多回复(8)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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