以sql server数据库为例的知识点(三)

以sql server数据库为例的知识点(三)

1:索引的作用:数据的查询 数据的处理速度 ----应用系统成败的标准
最普遍的优化方式
2:索引是什么?
索引:快速的定位我们要查找的数据,而不必取扫描整个表。
–从而可以加快我们查询的速度。–提高系统的性能
索引的缺点:占用存储空间,索引并不是越多越好,索引并不总是能提高系统性能的
3:索引的目的:可以更加快速高效地查询数据,减少系统的响应时间
索引分为 聚集索引 非聚集索引
主键 唯一索引
聚集索引:Clustered 逻辑顺序与物理顺序是一致的 最多只能有一个 可以没有
非聚集索引:Noclustered 逻辑顺序与物理顺序是并不一致的 可以有多个,也可以没有
非聚集索引要比聚集索引效率低;

如果需要多个列上建立索引,这些列建立组合索引。
列:小数据类型的,访问速度特别快;
索引是看不见的,但是如果你创建了索引,在查询大数据的时候,它的优势就是显而易见的;

–默认非聚集索引;
–聚集 主键索引
create clustered index PK_UserInfos
on UserInfos(UserId)
with
(
drop_existing=off–先删除原来的,create一个新的 off不删除原来的提示一个错误,索引已存在

)
–唯一非聚集索引
create unique nonclustered index uq_UserInfos
on UserInfos(UserName)
with
(
pad_index=on,
fillfactor=50,–指定创建索引时,每个索引页的数据占索引页大小的百分比
ignore_dup_key=on
)

–读写比:100:1 100
–读小于写:50-70
–读写各一半:80–90

–复合索引:多个列上建立的索引
create unique nonclustered index Index_UserInfos
on UserInfos(UserName,DeptId)
with
(
drop_existing=off
)

视图:虚拟表 由一个或者多个表通过查询而定义的 将查询定义保存起来,实际不包括数据。

与表的区别:表存储数据的地方,视图存储的是查询语句(索引视图除外,具体化了)

作用:简化查询 增加了数据的保密性 安全性上得到保证

缺点:只是简化了查询 ,并比提高查询的速度 增加了维护成本

分类:标准视图 (存储查询定义,没有存储数据)
索引视图(被具体化了的,创建了索引,显著提高查询性能,聚集了很多行的查询,不太适合经常更新基本数据集)
分区视图 (一台或者多台服务器间水平连接一组成员表的区分数据)

创建标准视图
create view 视图名
as
T-SQL语句
创建索引视图
create view 视图名 with schemabinding
as
select UserId,UserName,Age from dbo.UserInfos
go

创建分区视图
create view视图名
as
select * from Teat
union all
select * from Test3
go

标准视图与分区视图 都不允许修改表里的数据,会影响基础表
索引,视图 删除了,对应的基础表数据也被删除了,慎重使用;

存储过程:一种为了完成特定功能的一个或一组SQL语句的集合。经编译后
存储在服务器端的数据库中,可以利用存储过程来加速SQL语句的执行。调用名称,传入参数,执行来完成特定的功能。

分类:系统存储过程:master数据库中,其他数据库中可以直接调用,并且不必再前面加上数据库名,创建
数据库时,这些系统存储过程再新的数据库中自动创建。

      自定义存储过程 :用户自己创建,特定的功能创建。可以传入参数,也可以有返回值。

里面可以只是一个操作,也可以包含很多个。
执行:execute/exec 存储过程名 参数列表(多个参数,以逗号隔开)
优点:1.提高应用程序的通用性和可移植性。多次调用,而不必重新再去编写,维护人员可以随时修改
2.可以更有效的管理数据库权限
3.提高执行SQL速度
4.减轻服务器的负担

缺点:专门维护它,占用数据库空间。
语法:
create proc/procedure 存储过程名
@userId int,
@userName varchar(50)
as
begin
T-SQL语句
end
go

1:脚本创建存储过程语法
create proc/procedure 存储过程名
@userId int,
@userName varchar(50)
as
begin
T-SQL语句
end
go

2:创建一个简单的存储过程
–创建一个无参数的存储过程
create proc SearchUserInfo
as
begin
select UserId,UserName,Age from UserInfos
end

–调用执行
exec SearchUserInfo
–删除存储过程
drop proc SearchUserInfo

–创建带参数的存储过程
create proc AddUserInfo
@UserName varchar(50),
@UserPwd varchar(50),
@Age int
as
begin
declare @time datetime
set @time=GETDATE()
insert into UserInfos(UserName,UserPwd,Age)
values(@UserName,@UserPwd,@Age);
select * from UserInfos
end
go

–调用
exec AddUserInfo ‘lingli’,‘2344’,‘2323’

猜你喜欢

转载自blog.csdn.net/m0_46454966/article/details/127467371