提示:以下是本篇文章正文内容,下面案例可供参考
一、索引
索引:是用来提高检索查询效率的
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:视图是一张虚拟表,你也可以在虚拟表里面进行数据维护。但是现实应用场景一般都是对原始表进行维护
我们用视图,主要功能还是数据的展示,让我们有了视图后数据查询更加方便。