设为首页 收藏本站
查看: 950|回复: 0

[经验分享] SQL Server 索引和视图

[复制链接]

尚未签到

发表于 2015-6-27 05:56:45 | 显示全部楼层 |阅读模式
  Ø 索引
  1、 什么是索引
  索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。
  
  2、 索引分类
  数据库中索引主要分为两类:聚集索引和非聚集索引。SQL Server 2005还提供了唯一索引、索引视图、全文索引、xml索引等等。聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。
  
  # 聚集索引
  聚集索引是值表中数据行的物理存储顺序和索引的存储顺序完全相同。聚集索引根据索引顺序物理地重新排列了用户插入到表中的数据,因此,每个表只能创建一个聚集索引。聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。在默认情况下,主键约束自动创建聚集索引。
  
  # 非聚集索引
  非聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。
  非聚集索引没有改变表中物理行的位置,索引可以在以下情况下使用非聚集索引:
  一、如果某个字段的数据唯一性比较高
  二、如果查询所得到的数据量比较少
  
  聚集索引和非聚集索引的区别:  
  聚集索引
  非聚集索引
  每个表只允许创建一个聚集索引
  最多可以有249个非聚集索引
  物理的重排表中的数据以符合索引约束
  创建一个键值列表,键值指向数据在数据页中的位置
  用于经常查找数据的列
  用于从表中查找单个值的列

  # 其他类型索引
  除了以上索引,还有以下类型索引:
  a、 唯一索引:如果希望索引键都不同,可以创建唯一索引。聚集索引和非聚集索引都可以是唯一索引。
  b、 包含新列索引:索引列的最大数量是16个,索引列的字节总数的最高值是900。如果当多个列的字节总数大于900,切又想在这些劣种都包含索引是,可以使用包含性列索引
  c、 视图索引:提供视图查询效率,可以视图的索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引。
  d、 XML索引:是与xml数据关联的索引形式,是XML二进制blob的已拆分持久表示形式
  e、 全文索引:一种特殊类型的基于标记的功能性功能,用于帮助在字符串中搜索赋值的词
  
  3、 创建索引
  语法  

create [unique] [clustered | noclustered]index index_nameon 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_namegocreate index idx_stu_nameonstudent(name); --联合索引if (exists (select * from sys.indexes where name = 'idx_uqe_clu_stu_name_age'))    drop index student.idx_uqe_clu_stu_name_agegocreate unique clustered index idx_uqe_clu_stu_name_ageon student(name, age); if (exists (select * from sys.indexes where name = 'idx_cid'))    drop index student.idx_cidgo if (exists (select * from sys.indexes where name = 'idx_cid'))    drop index student.idx_cidgo --非聚集索引create nonclustered index idx_cidonstudent (cid)with fillFactor = 30;    --填充因子 --聚集索引if (exists (select * from sys.indexes where name = 'idx_sex'))    drop index student.idx_sexgocreate clustered index idx_sexonstudent(sex); --聚集索引if (exists (select * from sys.indexes where name = 'idx_name'))    drop index student.idx_namegocreate unique index idx_nameonstudent(name);
  
  4、 适合的创建索引的列
  当数据库的某一列被频繁的用于数据库查询时,或者该列用于数据库进行排序时可以创建成索引
  
  5、 不适合创建索引的列
  如果列中有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引。因为索引在搜索数据所花的时间比在表中逐行搜索话的时间更长。
  
  Ø 视图
  1、 什么是视图
  视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。
  
  2、 创建视图准则
  创建视图需要考虑一下准则:
  # 视图名称必须遵循标识符的规则,该名称不得与该架构的如何表的名称相同
  # 你可以对其他视图创建视图。允许嵌套视图,但嵌套不得超过32层。视图最多可以有1024个字段
  # 不能将规则和default定义于视图相关联
  # 视图的查询不能包含compute子句、compute by子句或into关键字
  # 定义视图的查询不能包含order by子句,除非在select 语句的选择列表中还有top子句
  
  下列情况必须指定视图中每列的名称:
  # 视图中的如何列都是从算术表达式、内置函数或常量派生而来
  # 视图中有两列或多列具有相同名称(通常由于视图定义包含联接,因此来自两个或多个不同的列具有相同的名称)
  # 希望视图中的列指定一个与其原列不同的名称(也可以在视图中重命名列)。无论是否重命名,视图列都回继承原列的数据类型
  
  3、 创建视图



--创建视图if (exists (select * from sys.objects where name = 'v_stu'))    drop view v_stugocreate view v_stuasselect id, name, age, sex from student;
  
  4、 修改视图



alter view v_stuasselect id, name, sex from student; alter view v_stu(编号, 名称, 性别)as    select id, name, sex from studentgoselect * from v_stu; select * from information_schema.views;
  
  5、 加密视图  
  
  




--加密视图if (exists (select * from sys.objects where name = 'v_student_info'))    drop view v_student_infogocreate view v_student_infowith encryption --加密as    select id, name, age from studentgo--view_definition is nullselect * from information_schema.views where table_name like 'v_stu';

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-80846-1-1.html 上篇帖子: 引用:初探Sql Server 执行计划及Sql查询优化 下篇帖子: SQL Server 2005 Analysis Services实践(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表