首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于查询效率解决方法

2012-01-30 
关于查询效率问题一.表达式1:selecta.*,b.*fromainnerjoinbona.idb.id表达式2:selecta.*,b.*froma,bwhere

关于查询效率
问题一.
表达式1:select   a.*,b.*   from   a   inner   join   b   on   a.id=b.id
表达式2:select   a.*,b.*   from   a,b   where   a.id=b.id
两个表达式哪个效率高?
问题二.
以上两个表达式查询后的结果会出现如下情况:
a.name       b.name
------------------
name     2     names   2
name1   2     names   2     '这行的names   2   并不存在数据!如果不想使用默认上行的数据应该如何解决?
多谢!

[解决办法]
第一个速度快 第二个相当于交叉联接
恶意用 isnull(字段,要替换的值)来替换出现null的值
可以用gruoping 了解是不是系统生成的null

[解决办法]
你显示的不是a.name和b.name么 相应的列
[解决办法]
第一个问题中的两个语句执行过程是一样的,为什么第一个快,可以给我例子吗
[解决办法]
前两个语句速度差不多
select a.*,b.* from a,b where a.id=b.id 等同于
select a.*,b.* from a cross join b where a.id=b.id
但因为有限制条件所以相当于内连接,速度和第一句几乎没有差别
至于cyc308() 的需求比较特别,按照你的意思,你想要的连接条件根本不是a.id=b.id
a.id=b.id就是得出那个结果
你想要得是a.rowid=b.rowid,很可惜SQLServer2000没有rowid的用法
[解决办法]
最好用INNER JOIN

热点排行