SQL Server 性能优化之——T-SQL NOT IN 和 NOT Exists

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文 http://www.cnblogs.com/BoyceYang/p/3139587.html 这次介绍一下T-SQL中“Not IN” 和“Not Exists”的优化。   Not IN 和 Not Exists 命令 : 有些情况下,需要select/update/delete 操作孤立数据。

原文 http://www.cnblogs.com/BoyceYang/p/3139587.html

这次介绍一下T-SQL中“Not IN” 和“Not Exists”的优化。

 

Not IN Not Exists 命令 :

有些情况下,需要select/update/delete 操作孤立数据。孤立数据:不存在主表中而存在其关联表中。

操作这样的数据,一般第一反应是利用“Not in” 或 “Not Exists”命令。使用Not IN会严重影响性能,因为这个命令会逐一检查每个记录,就会造成资源紧张,尤其是当对大数据进行更新和删除操作时,可能导致资源被这些操作锁住。

.

选择NOT IN 还是 NOT Exists

现在SQL Server 中有两个命令可以使用大数据的插入、更新、删除操作,不仅性能方面比NOT IN 和 NOT Exists有很大的提高,而且语法简单,写出来的语句看上去也很清爽。 现在就请它们闪亮登场,Merge 和 Except。

例子:

首先创建两个表

   1:  use [MyTest]
   2:  Create table Test1 (name varchar (100) )
   3:  Create table Test2 (name varchar (100) )

 

使用Not IN命令Select/update/delete操作:

   1:  SELECT name FROM Test1 where name not in (select name from Test2)
   2:  UPDATE Test1 SET name =N'New_Name' where name not in (select name from Test2)
   3:  DELETE Test1 FROM Test1 where name not in (select name from Test2)

 

使用性能更好的Merge and Except

   1:  merge Test1 T using (select name from Test1 except select name from Test2 )S on t.name=s.name
   2:  when matched then update SET name=N'New_Name' ;
   3:  merge Test1 T using (select name from Test1 except select name from Test2 )S on t.name=s.name
   4:  when matched then delete ;
   5:  SELECT * FROM Test1 S where not exists (select 1 from Test1 inner join Test2 on Test1.name=Test2.name and Test1.name=s.name)
 

 

注意,上面还是有一部分使用了Not Exists:

   1:  SELECT * FROM Test1 S where not exists (select 1 from Test1 inner join Test2 on Test1.name=Test2.name and Test1.name=s.name)

 

现在需要使用高效的Except:

   1:  select name from Test1 except select name from Test2

 

在这里只是给出了例子,没有拿出实际的对比数据。但是Merge 和Except 两个命令在大数据的处理方面的性能,要比

Not IN 和Not EXISTS 好很多。不管你信不信,反正我信了!!!

 

 敬请期待测试数据

在此谢谢读完这篇博客,有什么写的不对的地方请指正

 

有帮助就推荐下,有感想就下下来,不满意就留言,有问题就更正。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
22天前
|
SQL 安全 算法
【SQL server】玩转SQL server数据库:第四章 数据库安全性
【SQL server】玩转SQL server数据库:第四章 数据库安全性
65 12
|
5天前
|
SQL 数据可视化 算法
SQL Server聚类数据挖掘信用卡客户可视化分析
SQL Server聚类数据挖掘信用卡客户可视化分析
14 2
|
22天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
97 6
|
3天前
|
SQL 机器学习/深度学习 数据采集
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
14 0
|
5天前
|
SQL 数据采集 数据挖掘
SQL Server仓储物流公司visual studio发货数据仓库设计
SQL Server仓储物流公司visual studio发货数据仓库设计
11 0
|
5天前
|
SQL 机器学习/深度学习 算法
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
20 2
|
5天前
|
SQL 机器学习/深度学习 数据挖掘
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据
11 0
|
9天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
11 0