C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  SQLServer:索引

摘要:在有大量事务的数据库中,表和索引随着时间的推移而碎片化。因此,为了增进性能,应该定期检查表和索引的碎片,并对具有大量碎片的进行整理。 1、确定当前数据库中所有需要分析碎片的表。 2、确定所有表和索引的碎片。 3、考虑一下因素以确定需要进行碎片整理的表和索引。 高的碎片水平-avg_fragmentation_in_percent大于20%; 不是非常小的表或索引-也就是page_count大于8的; 4、整理具有大量碎片的表和索引; 这里给出一个样板SQL存储过程,它执行以下操作; 遍历系统上的所有数据库并确认符合碎片条件的每个数据库中表上的索引,并将它们保存到一个临时表中... 阅读全文
posted @ 2013-11-05 23:25 逆心 阅读(2991) 评论(2) 推荐(0) 编辑

摘要:一、索引的图形界面操作 SQL Server非常强大的就是图形界面操作。关于索引方面也一样那么强大,很多操作比如说重建索引啊,查看各种统计信息啊,都能够通过图形界面快速查看和操作,下面来看看SQL Server索引方面的GUI操作。 二、索引统计信息的图形界面操作 阅读全文
posted @ 2013-10-29 09:29 逆心 阅读(2765) 评论(0) 推荐(0) 编辑

摘要:一、索引压缩 数据和索引压缩在SQL Server2008被引入。压缩一个索引意味着将在一个页面中获得更多的关键字信息。这可以造成重大的性能改进,因为存储索引需要的页面和索引级别更少。因为索引中的键值被压缩和解压缩,也将造成CPU和内存的开销,所以这并不是适合所有索引的方案。 默认情况下,索引将不会被压缩。必须明确地在创建索引时要求索引被压缩。有两种压缩类型:行级压缩和页面级压缩。索引中的非叶子页面不接受页面类型压缩。 创建压缩索引的语法如下:CREATE NONCLUSTERED INDEX IX_Person_NameON PersonOneMillion(Name)WITH(DAT... 阅读全文
posted @ 2013-10-24 14:15 逆心 阅读(1822) 评论(0) 推荐(0) 编辑

摘要:一、索引视图基本概念 索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图,所为物化就是几乎和表一样,其数据也是会存储一份的(会占用硬盘空间,但是查询速度快,例如可以将count(),sum()等值设在索引视图中)。其优点是它在提取视图背后的信息方面提供了一个非常快的查找方法。在第一个索引(必须是针对一组唯一值的聚集索引)之后,通过使用来自第一个索引的聚集键作为参考点,SQL Server还能在视图上建立额外的索引。其限制如下:视图必须使用SCHEMABINDING选项;如果视图引用了任何用户自定义函数,那么这些函数也必须是模式绑定的;视图不可以引用任何其他的视图-只能引用表和UDF. 阅读全文
posted @ 2013-10-23 23:31 逆心 阅读(3304) 评论(0) 推荐(1) 编辑

摘要:聚集索引、非聚集索引、非聚集唯一索引 我们都知道建立适当的索引能够提高查询速度,优化查询。先说明一下,无论是聚集索引还是非聚集索引都是B树结构。 聚集索引默认与主键相匹配,在设置主键时,SQL Server会默认在主键列创建聚集索引。但是可以手动更改为在任意一个列创建聚集索引,然后在另一个字段或多个字段上定义主键。这时主键将会被作为一个唯一的非聚集索引(唯一索引)被创建。通过指定NONCLUSTERED关键字就可以做到。CREATE TABLE MyTableKeyExample{ Column1 int IDENTITY KEY NONCLUSTERED, Column2 int ... 阅读全文
posted @ 2013-10-23 18:22 逆心 阅读(1792) 评论(0) 推荐(1) 编辑

摘要:一、非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此。 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向新的数据页面,而不是更新所有相关非聚集索引的行定位器。这样,虽然降低了非聚集索引的维护开销,但是增加了从非聚集索引行到数据行的导航开销,因为添加了一个旧数据页面和信数据页面之间的连接。因此,将聚集索引作为行定位器降低了非聚集索引相关的开销。二、定义书签查找 当一个查询请求不是优化器选择的非聚集索引一部分的列时,需要一个查找。这对一个聚集索引来说是一个关键字查找,堆堆表来说是一个RID查找。这... 阅读全文
posted @ 2013-10-23 16:52 逆心 阅读(842) 评论(0) 推荐(0) 编辑

摘要:在SQL Server中,非聚集索引其实可以看做是一个含有聚集索引的表,但相对实际的表来说,非聚集索引中所存储的表的列数要少得多,一般就是索引列,聚集键(或RID)。非聚集索引仅仅包含源表中的非聚集索引的列和指向实际物理表的指针。一、非聚集索引之INCLUDE 非聚集索引其实可以看做一个含有聚集索引的列表,当这个非聚集索引中包含了查询所需要的所有信息的时候,则就不再需要去查基本表,仅仅做非聚集索引就能够得到所需要的数据。INCLUDE实际上也能称为覆盖索引,但它不影响索引键的大小。 先来看下面一张表: 此表大约是15万数据左右。聚集索引列是Id,我们先来在Name列建立一个非聚集... 阅读全文
posted @ 2013-06-27 14:39 逆心 阅读(3057) 评论(4) 推荐(0) 编辑

摘要:一、书签查找的概念 书签可以帮助SQL Server快速从非聚集索引条目导向到对应的行,其实这东西几句话我就能说明白。 如果表有聚集索引(区段结构),那么书签就是从非聚集索引找到聚集索引后,利用聚集索引定位到数据。此处的书签就是聚集索引。如果表没有聚集索引(堆结构)。那么扫描非聚集索引后,通过RID定位到数据,那么此处书签就是RID。 所谓的书签查找,就是通过聚集索引,然后利用聚集索引或RID定位到数据。 不论表示堆结构还是区段结构,数据的存放都是数据库文件的某文件->某页->某行,因此定位数据的文件组合起来就是文件号:页号:行号。这三个数字就是RID。如文件1的第77页的第12行 阅读全文
posted @ 2013-06-22 14:29 逆心 阅读(2790) 评论(0) 推荐(1) 编辑

摘要:实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的。 对于非常小的表(比64KB小得多),一个区中的页面可能属于多余一个的索引或表---这被称为混合区。如果数据库中有太多的小表,混合区帮助SQL Server节约磁盘空间。 随着表(或索引)增长并且请求超过8个页面,SQL Server创建专用于该表(或索引)的区并且从该区中分配页面。这样一个区被称为统一区,它可以为多达8个相同表或索引的页面请求服务。一、碎片 当数据库增长,页拆分,然后删除数据时,就会产生碎片。从增长的... 阅读全文
posted @ 2013-06-14 12:36 逆心 阅读(16407) 评论(1) 推荐(9) 编辑

摘要:SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列; 使用窄索引; 检查列的选择性; 检查列的数据类型; 考虑列顺序; 考虑索引类型(聚集索引OR非聚集索引);一、检查WHERE条件列和链接条件列 当一个查询提交到SQL Server时,查询优化器尝试为查询中引用的所有表查找最佳的数据访问机制。下面列出查询优化器针对WHERE和连接的工作方式:优化器识别WHERE子句和连接条件中包含的列。接着优化器检查这些列上的索引。优化器通过从索引上维护的统计确定子句的选择性,评估每个索引的有效性。最终,优化器根据前面几个步骤中手机的信息,估计读取所限定行开销... 阅读全文
posted @ 2013-06-14 09:21 逆心 阅读(3608) 评论(1) 推荐(2) 编辑

摘要:从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引。 主键约束(聚集索引) 唯一约束(唯一索引)一、CREATE INDEX语法 CREATE INDEX语句所做的事情与其听上去一样-用于在指定表或视图上基于声明的列创建索引:CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]INDEX ON ( [ASC|DESC][,...n])INCLUDE ( [,...n])[ WITH [PAD_INDEX = {ON | OF... 阅读全文
posted @ 2013-06-12 23:41 逆心 阅读(10528) 评论(0) 推荐(0) 编辑

摘要:一、存储结构 在SQL Server中,有许多不同的可用排列规则选项。 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D")。因为所有内容都表示为数字,所以处理起来速度最快,遗憾的是,它并不总是如人们所想象,在WHERE子句中进行比较时,使用该选项会造成严重的混乱。 字典顺序:这种排序方式与在字典中看到的排序方式一样,但是少有不同,可以设置大量不同的额外选项来决定是否区分大小写、音调和字符集。 1、平衡树(B-树) 平衡树或B-树仅是提供了一种以一致且相对低成本的方式查找特定信息的方法。其名称中的"平衡"是自说明的 阅读全文
posted @ 2013-06-12 01:06 逆心 阅读(27218) 评论(11) 推荐(18) 编辑

摘要:聚集索引的叶子页存储的就是表的数据。因此,表行物理上按照聚集索引列排序,因为表数据只能有一种物理顺序,所以一个表只能有一个聚集索引。 当我们创建主键约束时,如果不存在聚集索引并且该索引没有被明确指定为非聚集索引,SQL Server会自动将其创建为唯一的聚集索引,这并不是说主键列就一定是聚集索引,这只是默认行为而已。 示例,建表时通过指定主键为非聚集索引使主键列不为聚集列:CREATE TABLE MyTableKeyExample{ Column1 int IDENTITY PRIMARY KEY NONCLUSTERED, Column2 int }一、堆表与聚集表 没有聚集... 阅读全文
posted @ 2013-05-23 15:29 逆心 阅读(1105) 评论(0) 推荐(1) 编辑