SQL Server索引和视图的定义及使用是什么
Admin 2022-08-06 群英技术资讯 1554 次浏览
在实际应用中,我们有时候会遇到“SQL Server索引和视图的定义及使用是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“SQL Server索引和视图的定义及使用是什么”文章能帮助大家解决问题。索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。
数据库中索引主要分为两类:聚集索引和非聚集索引。SQL Server 2005还提供了唯一索引、索引视图、全文索引、xml索引等等。聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。
聚集索引是值表中数据行的物理存储顺序和索引的存储顺序完全相同。聚集索引根据索引顺序物理地重新排列了用户插入到表中的数据,因此,每个表只能创建一个聚集索引。聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。在默认情况下,主键约束自动创建聚集索引。
非聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。
非聚集索引没有改变表中物理行的位置,索引可以在以下情况下使用非聚集索引:
一、如果某个字段的数据唯一性比较高
二、如果查询所得到的数据量比较少
聚集索引和非聚集索引的区别:
聚集索引 |
非聚集索引 |
每个表只允许创建一个聚集索引 |
最多可以有249个非聚集索引 |
物理的重排表中的数据以符合索引约束 |
创建一个键值列表,键值指向数据在数据页中的位置 |
用于经常查找数据的列 |
用于从表中查找单个值的列 |
用于从表中查找单个值的列
除了以上索引,还有以下类型索引:
a、 唯一索引:如果希望索引键都不同,可以创建唯一索引。聚集索引和非聚集索引都可以是唯一索引。
b、 包含新列索引:索引列的最大数量是16个,索引列的字节总数的最高值是900。如果当多个列的字节总数大于900,切又想在这些劣种都包含索引是,可以使用包含性列索引
c、 视图索引:提供视图查询效率,可以视图的索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引。
d、 XML索引:是与xml数据关联的索引形式,是XML二进制blob的已拆分持久表示形式
e、 全文索引:一种特殊类型的基于标记的功能性功能,用于帮助在字符串中搜索赋值的词
语法
create [unique] [clustered | noclustered] index index_name on table_name (column_name ...) [with fillfactor=x]
unique唯一索引
clustered聚集索引
noclustered非聚集索引
fillfactor填充因子大小,范围在0-100直接,表示索引页填满的空间所占的百分比。
示例
if (exists (select * from sys.indexes where name = 'idx_stu_name'))
drop index student.idx_stu_name
go
create index idx_stu_name
on
student(name);
--联合索引
if (exists (select * from sys.indexes where name = 'idx_uqe_clu_stu_name_age'))
drop index student.idx_uqe_clu_stu_name_age
go
create unique clustered index idx_uqe_clu_stu_name_age
on student(name, age);
if (exists (select * from sys.indexes where name = 'idx_cid'))
drop index student.idx_cid
go
if (exists (select * from sys.indexes where name = 'idx_cid'))
drop index student.idx_cid
go
--非聚集索引
create nonclustered index idx_cid
on
student (cid)
with fillFactor = 30; --填充因子
--聚集索引
if (exists (select * from sys.indexes where name = 'idx_sex'))
drop index student.idx_sex
go
create clustered index idx_sex
on
student(sex);
--聚集索引
if (exists (select * from sys.indexes where name = 'idx_name'))
drop index student.idx_name
go
create unique index idx_name
on
student(name);
当数据库的某一列被频繁的用于数据库查询时,或者该列用于数据库进行排序时可以创建成索引
如果列中有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引。因为索引在搜索数据所花的时间比在表中逐行搜索话的时间更长。
视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。
创建视图需要考虑一下准则:
下列情况必须指定视图中每列的名称:
--创建视图
if (exists (select * from sys.objects where name = 'v_stu'))
drop view v_stu
go
create view v_stu
as
select id, name, age, sex from student;
alter view v_stu
as
select id, name, sex from student;
alter view v_stu(编号, 名称, 性别)
as
select id, name, sex from student
go
select * from v_stu;
select * from information_schema.views;
alter view v_stu
as
select id, name, sex from student;
alter view v_stu(编号, 名称, 性别)
as
select id, name, sex from student
go
select * from v_stu;
select * from information_schema.views;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章介绍了SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
SQL约束用于指定表中数据的规则。约束是作用于数据表中列上的规则,用于限制表中数据的类型。约束的存在保证了数据库中数据的精确性和可靠性。约束有列级和表级之分,列级约束作用于单一的列,而表级约束作用于整张数据表。
存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,类似一门程序设计语言,也包括了数据类型、流程控制、输入和输出和它自己的函数库。存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。不过SQL存储过程对于一些初学者来说还是比较抽象难理解的,因此本文将由浅至深地剖析SQL存储过程,帮助你学习它。
这篇文章主要介绍了一文搞懂MySQL脏读,幻读和不可重复读,MySQL 默认的事务隔离级别是可重复读,文章通过MySQL 中事务的隔离级别展开全文详细内容,需要的小伙伴可以参考一下
本文详细讲解了SQL Server中的排名函数与分析函数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008