我有2个人和角色.我必须以角色为基础的所有人.
select person.* from person inner join role on
person.roleid = role.id Where role.id = @Roleid
要么
select person.* from person inner join role on
person.roleid = role.id AND role.id = @Roleid
以上哪两种解决方案更好,为什么?
cha*_*aos 13
第一个更好,因为它在逻辑上是连贯的.范围条件与连接无关,因此将其作为连接的一部分是一个kludge,在这种情况下是无用的.
关系代数没有区别.来自这里和内部联接的标准是可以互换的.我根据可读性和情况使用两者.
在这种特殊情况下,您还可以使用:
select person.* from person WHERE person.roleid = @Roleid
唯一的区别是它不需要在角色表中存在一行(但我假设您具有参照完整性),如果roleid不是唯一的,它将不会返回多行(几乎可以肯定在大多数情况下我都是可以预见).
最好的办法是尝试这些查询并通过MS Sql的执行计划运行它们.我做了这个,结果看起来像这样:
显示相同查询性能的执行计划http://img223.imageshack.us/img223/6491/querycompare.png
正如您所看到的,性能是相同的(授予,在您的数据库上运行它可能会产生不同的结果.)因此,最佳查询是遵循您用于编写查询的一致约定的查询.
| 归档时间: | 
 | 
| 查看次数: | 295 次 | 
| 最近记录: |