SqlServer索引

------------索引------------------------
--请大家回顾现实生活中关于索引的例子:使用新华字典查汉字


--索引的分类:主键索引、聚集索引、非聚集索引、唯一索引

--主键索引:当我们为数据库表创建主键的同时,主键索引就一并创建了
--主键索引默认就是聚集索引。我们可以修改主键索引是否是聚集的


--聚集索引
--聚集索引为数据记录的物理存在顺序制定了标准
--聚集索引在每张表当中只能有1个,所以它很珍贵,要'省着用'

insert into tblstudent
(chvStudentName,dtmBirthday,chvCeilPhone)
values('wangwu', '1990-9-9', '13666666661')
select * from tblstudent;

create table tblTeacher
(
  intTeacherId int not null,
  chvTeacherName nvarchar(30),
  dtmBirthday datetime not null
)

insert into tblTeacher values(1, 'zhangsan', '1980-8-8');
insert into tblTeacher values(3, 'lisi', '1981-8-8');
insert into tblTeacher values(5, 'wangwu', '1982-8-8');
insert into tblTeacher values(2, 'zhaoliu', '1983-8-8');
insert into tblTeacher values(4, 'shagnqi', '1984-8-8');

select * from tblTeacher

--为教师信息表创建聚集索引,以保证每个学生的存在顺利按照id顺序排列
create clustered index ix_Teacher_TeacherId
on tblteacher(intteacherid)
go

select * from tblTeacher
--创建非聚集索引
create nonclustered index ix_Teacher_TeacherName
on tblteacher(chvTeacherName)
go

--创建唯一索引
create unique index ix_Student_CeilPhone
on TblStudent(chvCeilPhone)

go

--唯一索引和唯一约束是不是一样的
--不一样

--唯一索引可以创建在多个字段上面


--写一段T-sql脚本,实现向TblCardInfo中新增100000条记录
--函数介绍:
--Replicate(被重复的字符, 重复的次数):将指定的字符重复指定的次数
--RAND():生成一个介于0~1的随机浮点数 0.12587   0.36598
--floor(浮点数):将一个浮点数转换为整数,12.1->12   12.7->12
declare @name nvarchar(30), @balance money, @i int;
select @i = 1;
while(@i<=100000)
begin
  --name的格式为:zx000000001
  set @name = CONVERT(nvarchar(10), @i);
  set @name = 'zx' + Replicate('0', 8 - LEN(@name)) + @name;
  select @balance = floor(RAND()*100)
  insert into TblCardInfo
  (chvUserName,chvPassword,mnyBalance,dtmRegisterTime)
  values
  (@name, '123456', @balance, GETDATE());
  set @i=@i+1;
end

--计算查询会员名称为zx00085366的会员卡信息(创建索引前)
declare @time datetime, @millsec int;
--获取执行前的系统时间
set @time = GETDATE();
select * from TblCardInfo where chvUserName='zx00085366';
--获取执行的毫秒数
set @millsec = DATEDIFF(ms, @time, getdate());
select @millsec;

--为会员名称字段创建非聚集索引
create nonclustered index ix_cardInfo_username
on tblcardinfo(chvUserName)
go

--计算查询会员名称为zx00085366的会员卡信息(创建索引前)
declare @time datetime, @millsec int;
set @time = GETDATE();
select * from TblCardInfo where chvUserName='zx00085366';
set @millsec = DATEDIFF(ms, @time, getdate());
select @millsec;


 

原文地址:https://www.cnblogs.com/changjiang/p/2605295.html