SQL查询的效率

1、关于in 与not in

    一般在用于子查询时,用in或not in时,以小表查大表的模式,大表的相关字段设好索引,速度比较快,读操作较少,费时也低。如:

  select * from 小表 where ID in (select 大表中的字段 from 大表)

  如果反之,用大表查小表时,读操作是上百倍,费时高。

 

 

   需要注意的是,至少是在sql server2005中,在设置好索引后,in 与exists的效率比较,似乎没有区别!这可能是自动优化了in查询,甚至可能是转化成更有效率的语句有关。如:

  A:SELECT     小组编码,小组名称
FROM         小组表 where   exists (select * from 登记表 where 登记表.小组=小组表.小组编码 )

  B:SELECT      小组编码,小组名称
FROM    小组表 where 小组编码 in (select  登记表.小组 from 登记表)

 

  二者的reads居然一致为69,费时同为5。其中,登记表记录为12万条,小组表记录30条。小组字段为索引。

 

2、关于索引

    表大了后,最好设置索引。特别是在一些重复性较高的字段上设置索引后,查询速度相差极大,高时差几十倍。如户籍管理中,所属县、所属乡镇等字段上。

   反而是只有几十条、几百条记录的小表上,设置索引未必提高效率,甚至有时还降低许多。

 

3、表变量建主键

declare @tab_sa table (
ID int IDENTITY(1,1) NOT NULL,
CD char(8)
,NAME nvarchar(25)
primary key(id)
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值