请比较几个SQL语句执行的效率 本帖最后由 sxqwhxq 于 2011-08-14 10:56:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个,第三条实现的效果可能和一二条略有不同,是left join看下执行计划吧! 建议第二条或第三条。 谢谢,我用的是sql anywhere ,官方说明书有一段这样的话,不知是否适用于其他数据库:“一般而言,使用连接的执行速度要快于多层查询,因此,如有可能,sql anywhere 查询优化程序会将使用多层查询转化为使用连接的查询,这一转化不需要用户做任何操作” 官方说明书说的对,也不全对,具体的查询效率要数据库查询优化器如何分配,对于相同的sql,在数据量,索引,连接,子查询,都有不同的效果。 select sfid,jzsj,jzje from tabobj,(select sfid from tabhelp where address='红河镇') tabtemp where tabobj.sfid=tabtemp.sfid你用这个试试看,这样连接的数量会放到最小 用in肯定不可取 因为需要遍历整个子查询的表 所以索引都利用不到b和C得到的结果都可能不一样 无从比较如果将C的left join 换成inner join 效率就应该差不多 in未必不是最佳答案。如果分两部走,第一步取出符合条件的主键第二步将第一步的结果用in在程序里面拼好,再次查询。他的效率未必是很低的。在很多情况下甚至比连接速度还要快。 用in 你不遍历怎么取主键呢?难道你自己每个表还做一个hash吗? 高分求助各位高手门如何提高一下我的数据库的性能 数据显示错误怎么回事 求分类排名统计的SQL 各位:SQL SERVER 2000 升级到SP4 会引起什么问题吗? 数据库查询问题 mssql中的自增长列为主键,如果此列增长到了最大值会发生什么情况? 比如一张银行卡, 卡号是 9888 1755 1000 1001 怎么设计表! 谢谢 用过SQLServerBackup的进 在SQL 2005中的触发器问题 立即送50分!!! 如何用让存储过程返回一个RECORDSET? 如何用 check 设置邮箱的格式 判断字符的问题,如下
“一般而言,使用连接的执行速度要快于多层查询,因此,如有可能,sql anywhere 查询优化程序会将使用多层查询转化为使用连接的查询,这一转化不需要用户做任何操作”
你用这个试试看,这样连接的数量会放到最小
如果分两部走,
第一步取出符合条件的主键第二步将第一步的结果用in在程序里面拼好,再次查询。他的效率未必是很低的。在很多情况下甚至比连接速度还要快。
用in 你不遍历怎么取主键呢?难道你自己每个表还做一个hash吗?