Posts Tagged ‘from’

在数据库中有两个表,一个比较巨大,大约1千万条记录(表Big),另一个只有5000条(表small)。 目前需要根据表small来更新表Big。 UPDATE Big SET Bf1=0 WHERE BigId IN(SELECT BigId FROM Small WHERE Sf1>0) 但是这样执行下来,速度非常慢,并且连接使用这台DB服务器的程序也都慢了下来,几近不可用。 仔细分析这条SQL语句,使用了IN。有人说IN是会分拆成一个个OR表达式的,而OR语句将不会使用索引,所以有时候遇到OR,会用UNION ALL来代替。 但在这里用UNION ALL是不行的。 根据笔者的猜想,这条SQL语句大概会用上全表搜索,大表1千万条记录,那么至少比较1千万次,怎么会不慢呢。 于是选择改用游标,先将小表的记录提取出来,然后一条条的跟大表结合执行。 DECLARE curT CURSOR FOR SELECT BigId FROM Small WHERE Sf1>0; DECLARE @Id INT; OPEN curT; FETCH NEXT FROM curT INTO .......

More>>


SQL分类: DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server — 创建 备份数据的 device USE master EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’ — 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definit.......

More>>