有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扫描表的原理不是很懂,请各位大哥大姐帮帮忙。
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扫描表的原理不是很懂,请各位大哥大姐帮帮忙。
set statistics time on 看看就知道了。
但肯定是不一样。。
不過以前用其他數據庫的時候是可以肯定字段多的速度慢的。特別是字段多的並且每個字段都有值,甚至值還相當大,那速度更慢。
再请问下,是不是说如果A的name是主键,B的不是,甚至A快于B也是有可能的?
如果是主键,就更不可能一样了。
主键是聚集索引,在A表的字段那么多,使用的page就会比B表使用得多。
--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事实证明 字段多的效率低