------------索引------------------------
--请大家回顾现实生活中关于索引的例子:使用新华字典查汉字
--索引的分类:主键索引、聚集索引、非聚集索引、唯一索引
--主键索引:当我们为数据库表创建主键的同时,主键索引就一并创建了
--主键索引默认就是聚集索引。我们可以修改主键索引是否是聚集的
--聚集索引
--聚集索引为数据记录的物理存在顺序制定了标准
--聚集索引在每张表当中只能有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;