标题: MYSQL网页设计SQLServer 优化SQL语句 in 和not in的替... [打印本页] 作者: 简单生活 时间: 2015-1-16 22:15 标题: MYSQL网页设计SQLServer 优化SQL语句 in 和not in的替... MySQL数据库归MySQLAB公司所有,但是这个软件是开源的,有一个MySQL学习教程可以免费下载。稍俱常识的新入门者都可以轻松实现在一个常见硬件上安装和配置MySQL。可是用IN的SQL功能老是对照低的,从SQL实行的步骤来剖析用IN的SQL与不必IN的SQL有以下区分:
SQL试图将其转换成多个表的毗连,假如转换不乐成则先实行IN内里的子查询,再查询外层的表纪录,假如转换乐成则间接接纳多个表的毗连体例查询。因而可知用IN的SQL最少多了一个转换的历程。一样平常的SQL都能够转换乐成,但关于含有分组统计等方面的SQL就不克不及转换了。保举在营业麋集的SQL傍边只管不接纳IN操纵符
NOTIN此操纵是强列保举不利用的,由于它不克不及使用表的索引。保举用NOTEXISTS或(外毗连+判别为空)计划取代
在数据库中有两个表,一个是以后表Info(id,PName,remark,impdate,upstate),一个是备份数据表bakInfo(id,PName,remark,impdate,upstate),将以后表数据备份到备份表往,就触及到notin和in操纵了:
起首,增加10万条测试数据 复制代码代码以下:
createprocedureAddData
as
declare@idint
set@id=0
while(@id<100000)
begin
insertintodbo.Info(id,PName,remark,impdate,upstate)
values(@id,convert(varchar,@id)+0,abc,getdate(),0)
set@id=@id+1
end
execAddData
利用notin和in操纵: 复制代码代码以下:
SETSTATISTICSTIMEON
GO
--备份数据
insertintobakInfo(id,PName,remark,impdate,upstate)
selectid,PName,remark,impdate,upstatefromdbo.Info
whereidnotin(selectidfromdbo.bakInfo)
GO
SETSTATISTICSTIMEOFF