@索引的优点和缺点

比如,表,usersinfo,有一列是 姓名 列。
建立索引前,如果要搜索,姓名 叫张三的人, 则需要对整个表进行扫描。
对 姓名列建立索引后,再搜索,则只需要扫描索引 --就像一本书的目录。
(1)优点:
索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据,也就是当进行查询时,系统先搜索索引,从中找到数据的指针,再直接通过指针,直接定位到数据上,所以快。

(2)缺点:
还有就是需要注意的,索引是查的效率高了,但是在表中插入或更新数据时,将有额外的操作来维护索引,所以其他的效率低了,还有占用存储空间,还有不要建立过多的索引,过多索引引起反作用!

@sql批处理中while循环应用。(批量循环的向表中插入数据)
-- setp 1.
-- 建表
create table t_userinfo
(
userid int identity(1,1) primary key nonclustered,
nick varchar(50) not null default '',
classid int not null default 0,
writetime datetime not null default getdate()
)
GO
-- step 2.
--变量声明
declare @i int
declare @k int
declare @nick varchar(10)
set @i = 1
--while循环
while @i<1000000
BEGIN --左大括号
--设置变量的值
set @k = @i % 10
set @nick = convert(varchar,@i)
--插入数据
insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate())
set @i = @i + 1
END --右大括号
--while循环结束

 

@索引的应用实例和效果测试
DECLARE @start DATETIME
DECLARE @end DATETIME
SET @start=GETDATE();
SELECT * FROM [one_item50T-sql].dbo.t_userinfo tu WHERE userid=987655
SET @end=GETDATE();
PRINT CAST(DATEDIFF(ms,@start,@end) AS NVARCHAR)+'毫秒'
PRINT Cast(DATEDIFF(s,@start,@end)AS NVARCHAR)+'秒' --秒不准确
GO
--未创建索引前,第一次查询80毫秒左右,第二次查询76毫秒左右,接下来差不多都是76毫秒左右。
--给userid创建索引后,第一次查询10秒左右,第二次可以忽略时间不计。
--为哪个列建立的索引,效果就体现在对哪个列进行查询时。或者说效果体现在根据这个列查询的结果集上。例如上边,是根据userid查询,如果userid建立了索引,那效率就会显著提高。假如上边根据nick
查询,userid建立索引,nick不建立索引,那根据nick查询时,不会有效果。
--上边实例中,索引的效率主要体现在where语句上。

 

 

posted on 2013-11-03 22:03  学到老死  阅读(276)  评论(0编辑  收藏  举报