ms sql 索引(一)-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

ms sql 索引(一)

简介: 索引的用途 索引的主要作用就是为加快检索的速度(效率)。主要是为查询。这里的查询包括表自身的查询,还包括连接查询。此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化器就会选择使用索引。

 

索引的用途

索引的主要作用就是为加快检索的速度(效率)。主要是为查询。这里的查询包括表自身的查询,还包括连接查询。此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化器就会选择使用索引。

索引可能极大提高检索的速度。

例如:图书馆的图书如果无序排放,则要找《水浒传》这一本书,极有可能会把所有书都翻一遍,当然也有可能会第一本书就是它。如果给图书馆的图书按书名分列于不同书架,以字母排序,那找到S列书架,然后找Shshushui,然后找在shui书架中再找hu,然后找zhuan,那么就会找到这本书。

索引的分类

索引分聚集(聚簇)索引和非聚集(聚簇)索引。

聚集索引:表中的数据的物理顺序与排序顺序相同,表中可建立且只可建立一个聚集索引(物理顺序)。聚集索引由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着实际的排序的数据,非叶级存放着排序的索引。以图书馆查找《水浒传》为例的示意图:

上图是个示意图,但不表示聚集索引的正确图。索引通过B-tree算法来实现,中文的意思是平衡树,不是二叉树。

非聚集索引:不在物理顺序上排列数据,而是通过排序指针,指针指向数据。

非聚集索引也由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着的排序的指向实际数据的指针,非叶级存放着排序的索引。

Ms sql存储结构

Sql server在存储时,为提高数据库性能,以盘区为单位向数据库分配空间。一个盘区为8个连续的页(Page)。页是数据库存储的基本单位。页大小为8K。一个盘区为8*864K。页分为好几种页类型,例如:数据页,索引页,映射表页等。

例如:图书馆的图书以书架(页)为单位,每8个书架在一个小隔间(区)。

索引的参数

·FillFactor:设置创建索引时每个索引页的页级别中可用空间的比。用来设置索引页中预留的空间。它是填充因子,设置为100%,表示不留预留空间。对于只读表来说,可以设置为100%。设置填充因子的原因就是防止页分裂。

例如:假设图书馆的6号书架为S系统的书籍,现在摆满图书,则它的填充因子(度)为100%,那么如果图书馆新增加了一本书《三侠剑》,按索引来安排,则它应该放到6号书架,但6号书架已经满了,那么可以增加一个书架(页),这个书架可能挨着6号书架,但也有可能有一定距离,那么,在查找《三侠剑》时,就要求在两个书架中查找,可能6号书架中找不到,到新增加的那个书架去找,而这个书架离6号书架较远,影响了查找的效率。那么如果6号书架没有摆满,而是只摆了60本书(假设一本书为1%),那么填充因子(度)为60%。此时当添加《三侠剑》时,可以放到6号书架中,而不必再增加一个额外的书架。

·Pad_Index:设置创建索引时每个索引页的非页级别中的可用空间的比。它的值由FillFactor指定。

性能分析(简)

简单说明一下,详细说明在后篇说明。

·showplan_text:设置sql server不执行(onsql语句,而返回如何执行语句的详细信息。须做为单独的批处理运行,且不能用在存储过程中。与它类似的还有showplan_all,它的信息更详细。

·statistics io:显示执行sql语句的磁盘活动量。

 

 

输出项

中文输出名

含义

Table

表的名称。

Scan count

扫描计数

执行的索引或表扫描数。

logical reads

逻辑读取

从数据缓存读取的页数。

physical reads

物理读取

从磁盘读取的页数。

read-ahead reads

预读

为进行查询而放入缓存的页数。

lob logical reads

Lob逻辑读取

从数据缓存读取的 textntextimage 或大值类型 (varchar(max)nvarchar(max)varbinary(max)) 页的数目。

lob physical reads

Lob物理读取

从磁盘读取的 textntextimage 或大值类型页的数目。

Lob read-ahead reads

Lob预读

为进行查询而放入缓存的 textntextimage 或大值类型页的数目。

 

·statistics time:显示分析,编译,执行sql语句花费的时间(毫秒)。

·DBCC:全名为数据库控制台命令,即DataBase Console Command

命令类别

执行 

维护

对数据库、索引或文件组进行维护的任务。 

杂项

杂项任务,如启用跟踪标志或从内存中删除DLL

信息

收集并显示各种类型信息的任务。

验证

对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。

 

主要介绍几个:

DBCC ShowContig:显示指定的表或视图的数据和索引的碎片信息。这个命令在高版本sql中推荐由动态管理函数sys.dm_db_index_physical_stats代替。

Dbcc showcontig(表名(id)|索引名(id)|视图名(id) with

对于with部分,常用的是tableresults,用于通过表格显示信息结果。

DBCC DbReindex:重建立索引。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章