首頁 資料庫 mysql教程 sql数据库学习系列四之SQL Server 索引和视图

sql数据库学习系列四之SQL Server 索引和视图

Jun 07, 2016 pm 03:30 PM
server sql 學習 資料庫 系列 索引

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

    1、 什么是索引

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

 

    2、 索引分类

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

 

    # 聚集索引

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

 

    # 非聚集索引

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

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

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

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

 

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

聚集索引

非聚集索引

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

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

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

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

用于经常查找数据的列

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

    # 其他类型索引

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

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

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

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

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

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

   

    3、 创建索引

    语法

1

<span>create</span> [<span>unique</span>] [<span>clustered</span> | noclustered]

登入後複製

1

<span>index</span> index_name

登入後複製

1

<span>on</span> table_name (column_name ...)

登入後複製

1

[<span>with</span> <span>fillfactor</span>=x]

登入後複製

    unique唯一索引

    clustered聚集索引

    noclustered非聚集索引

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

 

    示例

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_stu_name'</span>))

登入後複製

1

<span>drop</span> <span>index</span> student.idx_stu_name

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>index</span> idx_stu_name

登入後複製

1

<span>on</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

student(name);

登入後複製
登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

--联合索引

登入後複製

1

<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>))

登入後複製

1

<span>drop</span> <span>index</span> student.idx_uqe_clu_stu_name_age

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>unique</span> <span>clustered</span> <span>index</span> idx_uqe_clu_stu_name_age

登入後複製

1

<span>on</span> student(name, age);

登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_cid'</span>))

登入後複製
登入後複製

1

<span>drop</span> <span>index</span> student.idx_cid

登入後複製
登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_cid'</span>))

登入後複製
登入後複製

1

<span>drop</span> <span>index</span> student.idx_cid

登入後複製
登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

--非聚集索引

登入後複製

1

<span>create</span> <span>nonclustered</span> <span>index</span> idx_cid

登入後複製

1

<span>on</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

student (cid)

登入後複製

1

<span>with</span> <span>fillFactor</span> = 30;    --填充因子

登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

--聚集索引

登入後複製
登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_sex'</span>))

登入後複製

1

<span>drop</span> <span>index</span> student.idx_sex

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>clustered</span> <span>index</span> idx_sex

登入後複製

1

<span>on</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

student(sex);

登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

--聚集索引

登入後複製
登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.indexes <span>where</span> name = <span>'idx_name'</span>))

登入後複製

1

<span>drop</span> <span>index</span> student.idx_name

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>unique</span> <span>index</span> idx_name

登入後複製

1

<span>on</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

student(name);

登入後複製
登入後複製

   

    4、 适合的创建索引的列

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

 

    5、 不适合创建索引的列

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

 

? 视图

    1、 什么是视图

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

 

    2、 创建视图准则

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

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

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

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

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

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

   

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

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

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

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

 

    3、 创建视图

1

--创建视图

登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.objects <span>where</span> name = <span>'v_stu'</span>))

登入後複製

1

<span>drop</span> <span>view</span> v_stu

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>view</span> v_stu

登入後複製

1

<span>as</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> id, name, age, sex <span>from</span> student;

登入後複製

   

    4、 修改视图

1

<span>alter</span> <span>view</span> v_stu

登入後複製

1

<span>as</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> id, name, sex <span>from</span> student;

登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>alter</span> <span>view</span> v_stu(编号, 名称, 性别)

登入後複製

1

<span>as</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> id, name, sex <span>from</span> student

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> * <span>from</span> v_stu;

登入後複製

1

  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> * <span>from</span> information_schema.views;

登入後複製

   

    5、 加密视图

1

--加密视图

登入後複製

1

<span>if</span> (<span>exists</span> (<span>select</span> * <span>from</span> sys.objects <span>where</span> name = <span>'v_student_info'</span>))

登入後複製

1

<span>drop</span> <span>view</span> v_student_info

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

<span>create</span> <span>view</span> v_student_info

登入後複製

1

<span>with</span> encryption --加密

登入後複製

1

<span>as</span>

登入後複製
登入後複製
登入後複製
登入後複製

1

<span>select</span> id, name, age <span>from</span> student

登入後複製

1

<span>go</span>

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

1

--view_definition <span>is</span> <span>null</span>

登入後複製

1

<span>select</span> * <span>from</span> information_schema.views

登入後複製

1

<span>where</span> table_name <span>like</span> <span>'v_stu'</span>;

登入後複製

1

 

登入後複製

1

 

登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 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)

Hibernate 框架中 HQL 和 SQL 的差異是什麼? Hibernate 框架中 HQL 和 SQL 的差異是什麼? Apr 17, 2024 pm 02:57 PM

Hibernate 框架中 HQL 和 SQL 的差異是什麼?

Go語言如何實作資料庫的增刪改查操作? Go語言如何實作資料庫的增刪改查操作? Mar 27, 2024 pm 09:39 PM

Go語言如何實作資料庫的增刪改查操作?

小米 15 系列全代號曝光:Dada、Haotian、Xuanyuan 小米 15 系列全代號曝光:Dada、Haotian、Xuanyuan Aug 22, 2024 pm 06:47 PM

小米 15 系列全代號曝光:Dada、Haotian、Xuanyuan

華為 Mate 60 系列最佳入手時機,新增 AI 消除 + 影像升級,更可享秋日禮遇活動 華為 Mate 60 系列最佳入手時機,新增 AI 消除 + 影像升級,更可享秋日禮遇活動 Aug 29, 2024 pm 03:33 PM

華為 Mate 60 系列最佳入手時機,新增 AI 消除 + 影像升級,更可享秋日禮遇活動

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

在PHP中使用MySQLi建立資料庫連線的詳盡教學

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate 如何實作多型映射?

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片

深入解析HTML如何讀取資料庫 深入解析HTML如何讀取資料庫 Apr 09, 2024 pm 12:36 PM

深入解析HTML如何讀取資料庫

See all articles