索引的用途
索引的主要作用就是为加快检索的速度(效率)。主要是为查询。这里的查询包括表自身的查询,还包括连接查询。此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化器就会选择使用索引。
索引可能极大提高检索的速度。
例如:图书馆的图书如果无序排放,则要找《水浒传》这一本书,极有可能会把所有书都翻一遍,当然也有可能会第一本书就是它。如果给图书馆的图书按书名分列于不同书架,以字母排序,那找到S列书架,然后找Sh,shu,shui,然后找在shui书架中再找hu,然后找zhuan,那么就会找到这本书。
索引的分类
索引分聚集(聚簇)索引和非聚集(聚簇)索引。
聚集索引:表中的数据的物理顺序与排序顺序相同,表中可建立且只可建立一个聚集索引(物理顺序)。聚集索引由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着实际的排序的数据,非叶级存放着排序的索引。以图书馆查找《水浒传》为例的示意图:
上图是个示意图,但不表示聚集索引的正确图。索引通过B-tree算法来实现,中文的意思是平衡树,不是二叉树。
非聚集索引:不在物理顺序上排列数据,而是通过排序指针,指针指向数据。
非聚集索引也由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着的排序的指向实际数据的指针,非叶级存放着排序的索引。
Ms sql存储结构
Sql server在存储时,为提高数据库性能,以盘区为单位向数据库分配空间。一个盘区为8个连续的页(Page)。页是数据库存储的基本单位。页大小为8K。一个盘区为8*8=64K。页分为好几种页类型,例如:数据页,索引页,映射表页等。
例如:图书馆的图书以书架(页)为单位,每8个书架在一个小隔间(区)。
索引的参数
·FillFactor:设置创建索引时每个索引页的页级别中可用空间的比。用来设置索引页中预留的空间。它是填充因子,设置为100%,表示不留预留空间。对于只读表来说,可以设置为100%。设置填充因子的原因就是防止页分裂。
例如:假设图书馆的6号书架为S系统的书籍,现在摆满图书,则它的填充因子(度)为100%,那么如果图书馆新增加了一本书《三侠剑》,按索引来安排,则它应该放到6号书架,但6号书架已经满了,那么可以增加一个书架(页),这个书架可能挨着6号书架,但也有可能有一定距离,那么,在查找《三侠剑》时,就要求在两个书架中查找,可能6号书架中找不到,到新增加的那个书架去找,而这个书架离6号书架较远,影响了查找的效率。那么如果6号书架没有摆满,而是只摆了60本书(假设一本书为1%),那么填充因子(度)为60%。此时当添加《三侠剑》时,可以放到6号书架中,而不必再增加一个额外的书架。
·Pad_Index:设置创建索引时每个索引页的非页级别中的可用空间的比。它的值由FillFactor指定。
性能分析(简)
简单说明一下,详细说明在后篇说明。
·showplan_text:设置sql server不执行(on)sql语句,而返回如何执行语句的详细信息。须做为单独的批处理运行,且不能用在存储过程中。与它类似的还有showplan_all,它的信息更详细。
·statistics io:显示执行sql语句的磁盘活动量。
输出项
|
中文输出名
|
含义
|
Table |
表 |
表的名称。 |
Scan count |
扫描计数 |
执行的索引或表扫描数。 |
logical reads |
逻辑读取 |
从数据缓存读取的页数。 |
physical reads |
物理读取 |
从磁盘读取的页数。 |
read-ahead reads |
预读 |
为进行查询而放入缓存的页数。 |
lob logical reads |
Lob逻辑读取 |
从数据缓存读取的 text、ntext、image 或大值类型 (varchar(max)、nvarchar(max)、varbinary(max)) 页的数目。 |
lob physical reads |
Lob物理读取 |
从磁盘读取的 text、ntext、image 或大值类型页的数目。 |
Lob read-ahead reads |
Lob预读 |
为进行查询而放入缓存的 text、ntext、image 或大值类型页的数目。 |
·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:重建立索引。