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/

转载请注明:博客园

目录
相关文章
|
2月前
|
SQL 索引
SQL索引小结
SQL索引小结
18 0
|
3月前
|
SQL 存储 数据库
MS-SQL创建查询排序语句总结
MS-SQL中的查询排序语句(ORDER BY)用于在执行SQL查询后,按照指定列的值对查询结果进行升序或降序排列。
67 0
|
9月前
|
SQL 数据库 数据库管理
|
9月前
|
SQL 关系型数据库 MySQL
SQL LIMIT
SQL LIMIT
|
SQL 数据库 索引
查看MS SQL最耗时间资源的SQL
查看MS SQL最耗时间资源的SQL
|
SQL 数据库 数据安全/隐私保护
MS SQL数据批量备份还原(适用于MS SQL 2005+)
原文:MS SQL数据批量备份还原(适用于MS SQL 2005+) 我们知道通过Sql代理,可以实现数据库的定时备份功能;当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较麻烦; 还好,微软自带的osql工具,比较实用,通过在命令行里里输入命令,也能实现数据库备份的功能;如果能通过sql语句来生成一个批处理文件,那就方便了; 下面即是生成批处理文件的sql脚本,通过它可以实现:运行一个批处理文件,备份数据库服务器上的所有数据库到指定目录。
1024 0
|
SQL 数据库 索引
sql之强制索引
1、今天我遇到一个问题,在处理百万级数据查询的时候,一般查询会很慢。 2、第一时间想到是建立联合索引,但是数据库存在多条索引的情况下,索引的执行是全部执行。 3、所以这里要按照特定的索引执行,就必须使用强制索引。
1140 0