sql sever 索引和视图

本文探讨了如何在SQL Server中创建、管理和使用索引,包括聚集索引与非聚集索引的区别,以及如何为AccountInfo表的AccountCode创建唯一非聚集索引。同时,通过实例介绍了视图的概念,如何创建和利用视图简化数据查询,提升工作效率。
摘要由CSDN通过智能技术生成


提示:以下是本篇文章正文内容,下面案例可供参考

一、索引

索引:是用来提高检索查询效率的

sql sever索引类型

按存储结构划分:
(1)聚集索引:
根据数据行的键值在表或视图中的排序存储这些数据行,每个表只有一个聚集索引。聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或者多列值排序(类似字典中的拼音索引)(物理存储顺序)。

(2)非聚集索引:
具有独立于数据行的结构,包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。(类似字典中的偏旁部首索引)(逻辑存储顺序

快速记忆:为什么叫聚集/非聚集?前者比较像字典中的拼音,相同的拼音都是聚在一起的。后者是按照部首,读法差异很大,非聚集。

sql sever索引其他分类
按数据唯一性区分:“唯一索引”,“非唯一索引”
按键列个数区分:“单列索引”,“多列索引”

创建索引的方式:
1.通过显式的create index命令
2.在创建约束时作为隐含对象
(1)主键约束(聚集索引)(2)唯一约束(唯一索引)

创建索引基本语法:

--clustered和nonclustered分别代表聚集索引和非聚集索引
--union代表唯一索引
create [union] [clustered / nonclustered]
index <index name> on <table or view name>--创建索引必须说明,是哪个表,哪个字段
(<column name> [asc/desc][...n])--asc/desc是说明根据正序排列还是倒序

举例说明:
现在有一张账户信息表

create table AccountInfo --账户信息表
(
   AccountId int primary key identity(1,1),--账户编号
   AccountCode varchar(20) not null,--身份证号码
   AccountPhone varchar(20) not null,--电话号码
   RealName varchar(20) not null,--真实姓名
   OpenTime smalldatetime not null--开户时间
)

现要求给 AccountInfo表中的AccountCode字段添加索引

create unique nonclustered index index_code
on AccountInfo(AccountCode)

创建好索引后,使用索引:比如我这里查询 AccountCode=31425253343的信息

select * from AccountInfo with(index = index_code)--在普通查询上使用一个with(index=索引名)
where AccountCode=31425253343

在这里插入图片描述

查询索引基本语法:
我们查找刚才创建的索引

--索引查看(sys.indexes)
select * from sys.indexes where name ='index_code'

在这里插入图片描述

删除索引基本语法:

drop index index_code on AccountInfo
--删除就不用写字段名了,直接on一个表名即可

二、视图

视图:可以理解为虚拟表

我们以BankCard表和AccountInfo表为例

create table BankCard --银行卡
(
   CardNo varchar(20) primary key ,--银行卡号
   AccountId int not null,--账户编号(与账户信息表形成主外键关系)
   CardPwd varchar(30) not null,--银行卡密码
   CardMoney money not null,--银行卡余额
   CardState int not null--状态:1正常、2挂失、3冻结、4注销
)


create table AccountInfo --账户信息表
(
   AccountId int primary key identity(1,1),--账户编号
   AccountCode varchar(20) not null,--身份证号码
   AccountPhone varchar(20) not null,--电话号码
   RealName varchar(20) not null,--真实姓名
   OpenTime smalldatetime not null--开户时间
)

我们回顾一下以往从查询:
比如:查询出卡号,身份证,姓名,余额信息

select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId

在这里插入图片描述
如果用视图怎么做呢?

创建视图基础语法:

create view 视图名
as
sql 语句
go

举例说明:

--创建视图
create view View_Account_Card
as
select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId
go

--使用视图
select * from View_Account_Card

在这里插入图片描述
删除视图基础语法:

drop view 视图名

举例说明:

drop view View_Account_Card

ps:视图是一张虚拟表,你也可以在虚拟表里面进行数据维护。但是现实应用场景一般都是对原始表进行维护
我们用视图,主要功能还是数据的展示,让我们有了视图后数据查询更加方便。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值