4.判断表中是否存在数据
  select count(*) from product
  select top(1) id from product
  很显然下面完胜
  5.连接查询的优化
  首先你要弄明白你想要的数据是什么样子的,然后再做出决定使用哪一种连接,这很重要。
  各种连接的取值大小为:
  内连接结果集大小取决于左右表满足条件的数量
  左连接取决与左表大小,右相反。
  完全连接和交叉连接取决与左右两个表的数据总数量
  select * from
  ( (select * from orde where OrderId>10000) o  left join orderproduct op on o.orderNum=op.orderNum )
  select * from
  ( orde o left join orderproduct op on o.orderNum=op.orderNum )
  where o.OrderId>10000

  由此可见减少连接表的数据数量可以提高效率。
  insert插入优化
  --创建临时表

create table #tb1
(
id int,
name nvarchar(30),
createTime datetime
)
declare @i int
declare @sql varchar(1000)
set @i=0
while (@i<100000)  --循环插入10w条数据
begin
set @i=@i+1
set @sql=' insert into #tb1 values('+convert(varchar(10),@i)+',''erzi'+convert(nvarchar(30),@i)+''','''+convert(nvarchar(30),getdate())+''')'
exec(@sql)
end
  我这里运行时间是51秒
  --创建临时表
create table #tb2
(
id int,
name nvarchar(30),
createTime datetime
)
declare @i int
declare @sql varchar(8000)
declare @j int
set @i=0
while (@i<10000)  --循环插入10w条数据
begin
set @j=0
set @sql=' insert into #tb2 select '+convert(varchar(10),@i*100+@j)+',''erzi'+convert(nvarchar(30),@i*100+@j)+''','''+convert(varchar(50),getdate())+''''
set @i=@i+1
while(@j<10)
begin
set @sql=@sql+' union all select '+convert(varchar(10),@i*100+@j)+',''erzi'+convert(nvarchar(30),@i*100+@j)+''','''+convert(varchar(50),getdate())+''''
set @j=@j+1
end
exec(@sql)
end
drop table #tb2
select count(1) from #tb2
  我这里运行时间大概是20秒
  分析说明:insert into select批量插入,明显提升效率。所以以后尽量避免一个个循环插入。
  优化修改删除语句
  如果你同时修改或删除过多数据,会造成cpu利用率过高从而影响别人对数据库的访问。
  如果你删除或修改过多数据,采用单一循环操作,那么会是效率很低,也是操作时间过程会很漫长。
  这样你该怎么做呢?
  折中的办法是,分批操作数据。
  delete product where id<1000
  delete product where id>=1000 and id<2000
  delete product where id>=2000 and id<3000
  .....
  当然这样的优化方式不一定是优的选择,其实这三种方式都是可以的,这要根据你系统的访问热度来定夺,关键你要明白什么样的语句是什么样的效果。
  总结:优化,重要的是在于你平时设计语句,数据库的习惯,方式。如果你平时不在意,汇总到一块再做优化,你需要耐心的分析,然而分析的过程看你的悟性,需求,知识水平啦。