日期:2014-05-18  浏览次数:20513 次

Sql语句执行效率问题,走过路过都进来看看!(exists,count,值类型,单引号)
Sql语句的效率问题,大家帮忙看看:
(以下问题皆为程序中直接使用Sql语句,非存储过程)
设表   [Table1]   字段为:
[ID]   int
[A]     varchar(50)
[B]     bit
[C]     int
[D]     datetime

1、Sql语句执行过程中如何绑定变量(?内部类型转换?):
Sql语句中的变量值是否都是作为   字符串   类型   强行转换成   内部类型的?
下面两条语句有什么区别?执行效率上呢(会不会有额外的消耗)?
select   *   from   [Table1]   where   [ID]   =   10
select   *   from   [Table1]   where   [ID]   =   '10 '
如果是   insert或update   呢?既然“单引号”是“边界符”,是否所有能格式化成字符串的   sql语句里的   变量的   值   都可以加上单引号呢?
如:(下面的语句执行效率有区别吗?是不是所有的值都可以加上单引号?)
insert   into   [Table1]   values   ( 'a ',   0,   1,   '2007-01-01 ')
insert   into   [Table1]   values   ( 'a ',   '0 ',   '1 ',   '2007-01-01 ')

2、使用Sql语句查询“数据是否已存在”:
怎么写效率最高?
select   1   where   exists   (select   [ID]   from   Table1   where   [ID]=1001)
select   count(1)   from   Table1   where   [ID]   =   1001
select   count([ID])   from   Table1   where   [ID]   =   1001
select   [ID]   from   Table1   where   [ID]   =   1001
select   top   1   [ID]   from   Table1   where   [ID]   =   1001




------解决方案--------------------
select * from [Table1] where [ID] = 10
select * from [Table1] where [ID] = '10 '
------------------
這個當然上面的好了,下面的要轉換成int

------解决方案--------------------
下面两条语句有什么区别?执行效率上呢(会不会有额外的消耗)?
select * from [Table1] where [ID] = 10
select * from [Table1] where [ID] = '10 '
---------------------
一样,可以看执行计划



------解决方案--------------------

如果ID唯一,不要加top 1,top 1比较影响性能,有top就会做一次sort. 如果id是主键,即使有top 1 也没有关系。

有count 肯定慢的,要先进行group by,

如果ID重复记录非常多,感觉用exists 就应该会快点