在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。 如 我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据) sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where Sendorder.person_id not in(select user_id from reg_person ) or Sendorder.worksite_id not in(select id from worksite) order by Sendorder.addtime desc" 程序执行时间:.毫秒 sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id) or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id) order by Sendorder.addtime desc" 程序执行时间:.毫秒 很明显使用not EXISTS效率高多了
推荐整理分享sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句(sql语句优化之用是什么),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sql语句优化的13种方法,sql语句优化5种方式,sql语句优化的几种方法,sql语句优化5种方式,sql常用优化技巧,sql的优化,sql常用优化技巧,sql语句优化之用是什么,内容如对您有帮助,希望把文章链接给更多的朋友!
推荐SQL Server 重新恢复自动编号列的序号的sql代码 在sqlserver中经常有这样的问题:一个表采用了自动编号的列之后,由于测试了好多数据,自动编号已累计了上万个。现在正是要用这个表了,测试数据
清空MSSQL日志 与set recovery simple 由于服务器上的数据库使用很长时间了日志文件已经是好几个了数据库服务器的一直采用的备份我想应该可以放弃以前的日志文件了所以清理以前的日
mssql注入方法小结 爆库语句,修改红色部分的数字挨个猜出库/**/and/**/(select/**/top/**/1/**/isnull(cast([name]/**/as/**/nvarchar()),char())%2bchar()/**/from/**/[master].[dbo].[sysdatabases]/**/