有A、B二张表
A表有100个字段,1W条数据
B表有1个字段,1W条数据A表有个name字段,B表也有个name字段(也只有这一个字段)A表和B表的name字段的数据、约束、索引等完全一样现用SELECT TOP 100 [name] FROM [A]和SELECT TOP 100 [name] FROM [B]对二表进行查询,请问执行效率是一样吗?还是B表快?由于对sql扫描表的原理不是很懂,请各位大哥大姐帮帮忙。

解决方案 »

  1.   

    应该是 一样的如果是 SELECT TOP 100 *  FROM  [A] SELECT TOP 100 *  FROM  [b] 就有差距了
      

  2.   


    set statistics time on 看看就知道了。
    但肯定是不一样。。
      

  3.   

    SQL 沒具體測試過
    不過以前用其他數據庫的時候是可以肯定字段多的速度慢的。特別是字段多的並且每個字段都有值,甚至值還相當大,那速度更慢。
      

  4.   

    NAME 的约束是主键约束吗?如果是的话SQL会为主键单独维护的,倘若两张表的NAME均为主键,那效率是一样的。
      

  5.   


    再请问下,是不是说如果A的name是主键,B的不是,甚至A快于B也是有可能的?
      

  6.   


    如果是主键,就更不可能一样了。
    主键是聚集索引,在A表的字段那么多,使用的page就会比B表使用得多。
      

  7.   


    --create table a
    --(a_name varchar(8) not null,
    -- c1 varchar(8) null,
    -- c2 varchar(8) null,
    -- c3 varchar(8) null,
    -- c4 varchar(8) null,
    -- c5 varchar(8) null,
    -- c6 varchar(8) null,
    -- c7 varchar(8) null,
    -- c8 varchar(8) null,
    -- c9 varchar(8) null,
    -- c10 varchar(8) null
    --primary key(a_name) )
    --
    --create table b
    --(b_name varchar(8) not null
    --primary key(b_name) )
    --
    --
    --declare @i int
    --set @i = 1
    --while @i <=10000
    --begin
    -- insert into a
    -- select convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i),
    -- convert(varchar(32),@i)
    --
    -- insert into b
    -- select convert(varchar(32),@i)
    --
    -- set @i = @i + 1
    --endSELECT TOP 100 a_name FROM a 
    SELECT TOP 100 b_name FROM b
    --drop table a
    --drop table b--执行计划
    查询1:(与该批有关的)查询开销 55%
    SELECT TOP 100 a_name FROM a 
    查询2:(与该批有关的)查询开销 45%
    SELECT TOP 100 b_name FROM b事实证明 字段多的效率低