首页 数据库 mysql教程 SQL Server 有关 索引和视图的简单介绍

SQL Server 有关 索引和视图的简单介绍

Jun 07, 2016 pm 03:10 PM
server sql 介绍 简单 索引 视图

索引 1、 什么是 索引 索引 就是数据表中数据和相应的存储位置的列表,利用 索引 可以提高在表或 视图 中的查找数据的速度。 2、 索引 分类 数据库中 索引 主要分为两类:聚集 索引 和非聚集 索引 。SQL Server 2005还提供了唯一 索引 、 索引 视图 、全文

索引

    1、 什么是索引

        索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。

 

    2、 索引分类

        数据库中索引主要分为两类:聚集索引和非聚集索引。SQL Server 2005还提供了唯一索引索引视图、全文索引、xml索引等等。聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。

 

    # 聚集索引

        聚集索引是值表中数据行的物理存储顺序和索引的存储顺序完全相同。聚集索引根据索引顺序物理地重新排列了用户插入到表中的数据,因此,每个表只能创建一个 聚集索引。聚集索引经常创建在表中经常被搜索到的列或按顺序访问的列上。在默认情况下,主键约束自动创建聚集索引

 

    # 非聚集索引

        非聚集索引不改变表中数据列的物理存储位置,数据与索引分开存储,通过索引指向的地址与表中的数据发生关系。

        非聚集索引没有改变表中物理行的位置,索引可以在以下情况下使用非聚集索引

        一、如果某个字段的数据唯一性比较高

        二、如果查询所得到的数据量比较少

 

聚集索引和非聚集索引的区别:

聚集索引

非聚集索引

每个表只允许创建一个聚集索引

最多可以有249个非聚集索引

物理的重排表中的数据以符合索引约束

创建一个键值列表,键值指向数据在数据页中的位置

用于经常查找数据的列

用于从表中查找单个值的列

    # 其他类型索引

    除了以上索引,还有以下类型索引

        a、 唯一索引:如果希望索引键都不同,可以创建唯一索引。聚集索引和非聚集索引都可以是唯一索引

        b、 包含新列索引索引列的最大数量是16个,索引列的字节总数的最高值是900。如果当多个列的字节总数大于900,切又想在这些劣种都包含索引是,可以使用包含性列索引

        c、 视图索引:提供视图查询效率,可以视图索引物理化,也就是说将结果集永久存储在索引中,可以创建视图索引

        d、 XML索引:是与xml数据关联的索引形式,是XML二进制blob的已拆分持久表示形式

        e、 全文索引:一种特殊类型的基于标记的功能性功能,用于帮助在字符串中搜索赋值的词

   

    3、 创建索引

    语法

<span>create</span> [<span>unique</span>] [<span>clustered</span> | noclustered]
登录后复制
<span>index</span> index_name
登录后复制
<span>on</span> table_name (column_name ...)
登录后复制
[<span>with</span> <span>fillfactor</span>=x]
登录后复制

    unique唯一索引

    clustered聚集索引

    noclustered非聚集索引

    fillfactor填充因子大小,范围在0-100直接,表示索引页填满的空间所占的百分比。

 

    示例

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_stu_name'</span>))
登录后复制
    <span>drop</span> <span>index</span> student.idx_stu_name
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>index</span> idx_stu_name
登录后复制
<span>on</span>
登录后复制
登录后复制
登录后复制
登录后复制
student(name);
登录后复制
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
--联合<strong>索引</strong>
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_uqe_clu_stu_name_age'</span>))
登录后复制
    <span>drop</span> <span>index</span> student.idx_uqe_clu_stu_name_age
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>unique</span> <span>clustered</span> <span>index</span> idx_uqe_clu_stu_name_age
登录后复制
<span>on</span> student(name, age);
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_cid'</span>))
登录后复制
登录后复制
    <span>drop</span> <span>index</span> student.idx_cid
登录后复制
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_cid'</span>))
登录后复制
登录后复制
    <span>drop</span> <span>index</span> student.idx_cid
登录后复制
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
--非聚集<strong>索引</strong>
登录后复制
<span>create</span> <span>nonclustered</span> <span>index</span> idx_cid
登录后复制
<span>on</span>
登录后复制
登录后复制
登录后复制
登录后复制
student (cid)
登录后复制
<span>with</span> <span>fillFactor</span> = 30;    --填充因子
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
--聚集<strong>索引</strong>
登录后复制
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_sex'</span>))
登录后复制
    <span>drop</span> <span>index</span> student.idx_sex
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>clustered</span> <span>index</span> idx_sex
登录后复制
<span>on</span>
登录后复制
登录后复制
登录后复制
登录后复制
student(sex);
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
--聚集<strong>索引</strong>
登录后复制
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_name'</span>))
登录后复制
    <span>drop</span> <span>index</span> student.idx_name
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>unique</span> <span>index</span> idx_name
登录后复制
<span>on</span>
登录后复制
登录后复制
登录后复制
登录后复制
student(name);
登录后复制
登录后复制

   

    4、 适合的创建索引的列

        当数据库的某一列被频繁的用于数据库查询时,或者该列用于数据库进行排序时可以创建成索引

 

    5、 不适合创建索引的列

        如果列中有几个不同的值,或者表中仅包含几行值,则不推荐为其创建索引。因为索引在搜索数据所花的时间比在表中逐行搜索话的时间更长。

 

Ø 视图

    1、 什么是视图

        视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。

 

    2、 创建视图准则

        创建视图需要考虑一下准则:

    # 视图名称必须遵循标识符的规则,该名称不得与该架构的如何表的名称相同

    # 你可以对其他视图创建视图。允许嵌套视图,但嵌套不得超过32层。视图最多可以有1024个字段

    # 不能将规则和default定义于视图相关联

    # 视图的查询不能包含compute子句、compute by子句或into关键字

    # 定义视图的查询不能包含order by子句,除非在select 语句的选择列表中还有top子句

   

    下列情况必须指定视图中每列的名称:

    # 视图中的如何列都是从算术表达式、内置函数或常量派生而来

    # 视图中有两列或多列具有相同名称(通常由于视图定义包含联接,因此来自两个或多个不同的列具有相同的名称)

    # 希望视图中的列指定一个与其原列不同的名称(也可以在视图中重命名列)。无论是否重命名,视图列都回继承原列的数据类型

 

    3、 创建视图

--创建<strong>视图</strong>
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.objects <span>where</span> name = <span>'v_stu'</span>))
登录后复制
    <span>drop</span> <span>view</span> v_stu
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>view</span> v_stu
登录后复制
<span>as</span>
登录后复制
登录后复制
登录后复制
登录后复制
<span>select</span> id, name, age, sex <span>from</span> student;
登录后复制

   

    4、 修改视图

<span>alter</span> <span>view</span> v_stu
登录后复制
<span>as</span>
登录后复制
登录后复制
登录后复制
登录后复制
<span>select</span> id, name, sex <span>from</span> student;
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>alter</span> <span>view</span> v_stu(编号, 名称, 性别)
登录后复制
<span>as</span>
登录后复制
登录后复制
登录后复制
登录后复制
    <span>select</span> id, name, sex <span>from</span> student
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>select</span> * <span>from</span> v_stu;
登录后复制
 
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>select</span> * <span>from</span> information_schema.views;
登录后复制

   

    5、 加密视图

--加密<strong>视图</strong>
登录后复制
<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.objects <span>where</span> name = <span>'v_student_info'</span>))
登录后复制
    <span>drop</span> <span>view</span> v_student_info
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<span>create</span> <span>view</span> v_student_info
登录后复制
<span>with</span> encryption --加密
登录后复制
<span>as</span>
登录后复制
登录后复制
登录后复制
登录后复制
    <span>select</span> id, name, age <span>from</span> student
登录后复制
<span>go</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
--view_definition <span>is</span> <span>null</span>
登录后复制
<span>select</span> * <span>from</span> information_schema.views 
登录后复制
<span>where</span> table_name <span>like</span> <span>'v_stu'</span>;
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

最简便的硬盘序列号查询方式 最简便的硬盘序列号查询方式 Feb 26, 2024 pm 02:24 PM

硬盘序列号是硬盘的一个重要标识,通常用于唯一标识硬盘以及进行硬件识别。在某些情况下,我们可能需要查询硬盘序列号,比如在安装操作系统、查找正确设备驱动程序或进行硬盘维修等情况下。本文将介绍一些简单的方法,帮助大家查询硬盘序列号。方法一:使用Windows命令提示符打开命令提示符。在Windows系统中,按下Win+R键,输入"cmd"并按下回车键即可打开命

Hibernate 框架中 HQL 和 SQL 的区别是什么? Hibernate 框架中 HQL 和 SQL 的区别是什么? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中进行比较:HQL(1.面向对象语法,2.数据库无关的查询,3.类型安全),而SQL直接操作数据库(1.与数据库无关的标准,2.可执行复杂查询和数据操作)。

Oracle SQL中除法运算的用法 Oracle SQL中除法运算的用法 Mar 10, 2024 pm 03:06 PM

《OracleSQL中除法运算的用法》在OracleSQL中,除法运算是常见的数学运算之一。在数据查询和处理过程中,除法运算可以帮助我们计算字段之间的比例或者得出特定数值的逻辑关系。本文将介绍OracleSQL中除法运算的用法,并提供具体的代码示例。一、OracleSQL中除法运算的两种方式在OracleSQL中,除法运算可以使用两种不同的方式进行

Oracle和DB2的SQL语法比较与区别 Oracle和DB2的SQL语法比较与区别 Mar 11, 2024 pm 12:09 PM

Oracle和DB2是两个常用的关系型数据库管理系统,它们都有自己独特的SQL语法和特点。本文将针对Oracle和DB2的SQL语法进行比较与区别,并提供具体的代码示例。数据库连接在Oracle中,使用以下语句连接数据库:CONNECTusername/password@database而在DB2中,连接数据库的语句如下:CONNECTTOdataba

详解MyBatis动态SQL标签中的Set标签功能 详解MyBatis动态SQL标签中的Set标签功能 Feb 26, 2024 pm 07:48 PM

MyBatis动态SQL标签解读:Set标签用法详解MyBatis是一个优秀的持久层框架,它提供了丰富的动态SQL标签,可以灵活地构建数据库操作语句。其中,Set标签是用于生成UPDATE语句中SET子句的标签,在更新操作中非常常用。本文将详细解读MyBatis中Set标签的用法,以及通过具体的代码示例来演示其功能。什么是Set标签Set标签用于MyBati

SQL出现5120错误怎么解决 SQL出现5120错误怎么解决 Mar 06, 2024 pm 04:33 PM

解决办法:1、检查登录用户是否具有足够的权限来访问或操作该数据库,确保该用户具有正确的权限;2、检查SQL Server服务的帐户是否具有访问指定文件或文件夹的权限,确保该帐户具有足够的权限来读取和写入该文件或文件夹;3、检查指定的数据库文件是否已被其他进程打开或锁定,尝试关闭或释放该文件,并重新运行查询;4、尝试以管理员身份运行Management Studio等等。

如何安装、卸载、重置Windows服务器备份 如何安装、卸载、重置Windows服务器备份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer操作系统自带的一个功能,旨在帮助用户保护重要数据和系统配置,并为中小型和企业级企业提供完整的备份和恢复解决方案。只有运行Server2022及更高版本的用户才能使用这一功能。在本文中,我们将介绍如何安装、卸载或重置WindowsServerBackup。如何重置Windows服务器备份如果您的服务器备份遇到问题,备份所需时间过长,或无法访问已存储的文件,那么您可以考虑重新设置WindowsServer备份设置。要重置Windows

数据库技术大比拼:Oracle和SQL的区别有哪些? 数据库技术大比拼:Oracle和SQL的区别有哪些? Mar 09, 2024 am 08:30 AM

数据库技术大比拼:Oracle和SQL的区别有哪些?在数据库领域中,Oracle和SQLServer是两种备受推崇的关系型数据库管理系统。尽管它们都属于关系型数据库的范畴,但两者之间存在着诸多不同之处。在本文中,我们将深入探讨Oracle和SQLServer之间的区别,以及它们在实际应用中的特点和优势。首先,Oracle和SQLServer在语法方面存

See all articles