上一页 1 ··· 3 4 5 6 7 8 下一页
摘要: 在 理解统计信息(4/6):自动更新统计信息的阀值——人为更新统计信息的重要性里,我们讨论了自动更新统计信息的阀值,这个阀值在某些情况下,基于自动更新的统计信息还是可以获得最优的执行计划的。在大多数情况下,人为更新统计信息可以获得更好的性能。这个文章,我们可以来看下如何检测过期的统计信息。在SQL ... 阅读全文
posted @ 2015-05-22 14:41 Woodytu 阅读(1320) 评论(0) 推荐(4) 编辑
摘要: 在理解统计信息(3/6):谁创建和管理统计信息?在性能调优中,统计信息的作用里我们讨论了统计信息的自动创建和自动更新。我们真的需要人为维护统计信息来保持性能最优?答案是肯定的,这取决与你的工作量。SQL Server只在达到阀限值时进行统计信息的自动更新。当大量的Insert/Update/Dele... 阅读全文
posted @ 2015-05-22 11:32 Woodytu 阅读(2016) 评论(0) 推荐(4) 编辑
摘要: 在理解统计信息(2/6):直方图中,我们讨论了直方图,密度向量,还有SQL Server如何用统计信息做基数计算(cardinalityestimation)。这篇文章会讨论统计信息如何被创建,还有统计信息在性能调优中的重要性。有2类统计信息,索引统计信息和列统计信息。索引统计信息是索引创建的一部分... 阅读全文
posted @ 2015-05-21 18:13 Woodytu 阅读(1340) 评论(0) 推荐(1) 编辑
摘要: 在理解统计信息(1/6):密度向量里,我们讨论了在统计里存储的密度向量信息。这篇文章会讨论下直方图。我们再次创建SalesOrderDetail表的副本,并在上面建立2个索引。1 USE StatisticsDB2 GO3 SELECT * INTO SalesOrderDetail FROM Ad... 阅读全文
posted @ 2015-05-21 10:44 Woodytu 阅读(2439) 评论(0) 推荐(3) 编辑
摘要: 时间过得真快——再过几分钟,你就要完成第2个月的性能调优培训。今天这部分培训我想讲下非聚集索引的更多信息,还有你会碰到它的一些负作用。上一星期我们讨论了SQL Server里的书签查找,它是非常危险的。在执行计划里SQL Server访问非聚集索引时,额外列必须要从表本身获取时(因为它们不是非聚集索... 阅读全文
posted @ 2015-05-20 20:44 Woodytu 阅读(1458) 评论(2) 推荐(0) 编辑
摘要: 在日常生活中,我们用统计信息来采取决定。SQL Server优化器也用同样的方式,使用统计信息来选择正确的执行计划。如果统计信息错误或过期,SQL Server可能就会选择错误的执行计划。在这个文章里,我们换个方式理解下统计信息。查询优化器使用统计信息来判断每一步返回的行。执行计划里的估计行数信息是... 阅读全文
posted @ 2015-05-20 18:43 Woodytu 阅读(2650) 评论(1) 推荐(3) 编辑
摘要: 在索引碎片里我们解释了不同类型的碎片,还有它们如何影响查询性能。在这个文章里,我们会讨论下如何检测索引碎片。内部碎片检测内部碎片是关于页面饱和度的一切,可以用DETAILED模式的sys.dm_db_index_physical_stats,avg_page_space_used_in_percen... 阅读全文
posted @ 2015-05-19 19:10 Woodytu 阅读(1231) 评论(0) 推荐(2) 编辑
摘要: 这篇文章会解释下不同类型的碎片。理解索引碎片的概念对有效检测和移除碎片非常重要。什么是碎片碎片可以定义为:任何情况下,在访问一个表时,造成比适量更多的磁盘IO操作或更长的磁盘IO操作。SELECT查询的最佳操作发生在,表的数据页是尽可能连续的,而且页是尽可能完整打包(fully packed)的。碎... 阅读全文
posted @ 2015-05-19 18:07 Woodytu 阅读(5990) 评论(4) 推荐(9) 编辑
摘要: 在过去的文章里,我们已经讨论了各种不同索引。这个文章里,我们会讨论下键列的顺序(索引列的顺序)。索引键列的顺序基于数据的访问模式还有你想如何组织数据。对于索引键列的顺序,常规指导方针就是把查询用到最多的列放在第一列。这并不是说,所有你索引里的唯一ID列就应该是第一列。优化器是基于索引上的可用统计信息... 阅读全文
posted @ 2015-05-17 19:41 Woodytu 阅读(1991) 评论(0) 推荐(4) 编辑
摘要: 过滤索引(Filtered index)是在SQL Server 2008里新引入的功能。到目前我们谈到的索引都是在建立在整张表上的。换句话说,索引和表有一样的记录树。使用过滤索引,我们可以创建表子集的索引。这个可以通过创建索引的时候加上where子语完成。这个可以帮助在存储上减小索引的大小同样索引... 阅读全文
posted @ 2015-05-17 16:08 Woodytu 阅读(2906) 评论(0) 推荐(4) 编辑
摘要: 在索引深入浅出:非聚集索引的B树结构在聚集表里,在聚集表里,我们看到非聚集索引的叶子层只包含非聚集索引键和聚集索引键。从聚集表结构或堆表结构里拿到剩下列,SQL Server需要进行书签/键查找操作。很多情况下书签或键查找非常消耗资源。我们来看个例子。在这里我们打开了IO统计信息,还有点击工具栏的显... 阅读全文
posted @ 2015-05-17 14:31 Woodytu 阅读(2140) 评论(0) 推荐(4) 编辑
摘要: 在索引深入浅出:非聚集索引的B树结构在聚集表里,我们讨论了非聚集索引。我们提到,唯一非聚集索引可以让所讨论的问题变得简单很多。我们已经知道了非聚集索引的通用结构,现在我们来看下在非唯一列上的非聚集索引的存储结构。在索引深入浅出:选择正确并合适的聚集索引键里,我们讨论了在非唯一列上如何管理聚集键。我们... 阅读全文
posted @ 2015-05-15 21:38 Woodytu 阅读(1816) 评论(1) 推荐(1) 编辑
摘要: 今天我们来探讨下聚集索引的设计要求。在选择聚集索引键时,有好几点需要考虑的。选择聚集索引键没有硬性规定。多实践,多从网上找问题的答案都会帮你找到正确的索引键。唯一性(Uniqueness)SQL Server允许你在非唯一列创建聚集索引,但是唯一性是任何索引最理想的属性,尤其对于聚集索引。即使SQL... 阅读全文
posted @ 2015-05-15 15:22 Woodytu 阅读(2349) 评论(0) 推荐(3) 编辑
摘要: 在“索引深入浅出:非聚集索引的B树结构在聚集表”里,我们讨论了在聚集表上的非聚集索引,这篇文章我们讨论下在堆表上的非聚集索引。非聚集索引可以在聚集表或堆表上创建。当我们在聚集表上创建非聚集索引时,聚集索引键担当为行指针。在堆表里,文件号,页号和槽号(file id , page number and... 阅读全文
posted @ 2015-05-14 18:21 Woodytu 阅读(2494) 评论(1) 推荐(6) 编辑
摘要: 上个星期我讨论了SQL Server里的聚集索引。当你在表上定义了一个聚集索引,你是物理上把你的表数据按提供的聚集键列的顺序存储。在SQL Server里,一个表只能定义一个聚集索引,非聚集索引可以定义多个(最多999个)。非聚集索引是第二索引,你可以在表上列进行定义。你也可以把非聚集索引与书比较。... 阅读全文
posted @ 2015-05-14 14:53 Woodytu 阅读(2400) 评论(0) 推荐(2) 编辑
摘要: 一个表只能有一个聚集索引,数据行以此聚集索引的顺序进行存储,一个表却能有多个非聚集索引。我们已经讨论了聚集索引的结构,这篇我们会看下非聚集索引结构。非聚集索引的逻辑呈现简单来说,非聚集索引是表的子集。当我们定义了一个非聚集索引时,SQL Server把整套非聚集索引键存在不同的页里。我们来看下一个包... 阅读全文
posted @ 2015-05-14 00:19 Woodytu 阅读(4030) 评论(7) 推荐(10) 编辑
摘要: 在SQL Server里,有2种表是以存储为基础的。有聚集索引的表叫聚集表,没有聚集索引的表叫堆表。在上一篇文章,我们讨论了堆表的特性和存储结构。在这篇文章里,我们来看下聚集表。有聚集索引的表叫聚集表。聚集索引保存了使用B树结构的聚集键,并只能以此顺序存储实际的数据。这也是SQL Server限制一... 阅读全文
posted @ 2015-05-12 22:25 Woodytu 阅读(5411) 评论(11) 推荐(13) 编辑
摘要: 在上一个文章里,我们理解了有聚集索引表和没有聚集索引表之间的区别。有聚集索引的表叫聚集表。没有聚集索引的表叫堆表(heap table)。堆表(heap table)没有聚集索引的表堆表在sys.partitions里有1条index_id = 0 的记录数据存储没有任何的顺序,插入数据也没顺序由于... 阅读全文
posted @ 2015-05-12 15:57 Woodytu 阅读(6696) 评论(0) 推荐(5) 编辑
摘要: 很多人对索引都没有一个清晰的认识,对于聚集索引和非聚集索引之间的区别也不是很清楚。如果有人问我索引是什么,我觉得这个问题有点大,很难在一篇文章里解释清楚。所以我决定尝试写这一系列文章,用一个简单的,可以理解的方法解释索引,尽管网上关于索引的文章有一箩筐那么多。简单来说,索引帮助数据库引擎使用最小的资... 阅读全文
posted @ 2015-05-12 14:14 Woodytu 阅读(2974) 评论(2) 推荐(5) 编辑
摘要: 本篇是“索引深入浅出”的开篇,也是这个系列文章的聚集索引页,下面文章标题排列顺序将和对应文章发布顺序一致:索引简介:索引概述,通过现实生活实例理解聚集索引、非聚集索引还有键查找(Key Look up)。索引深入浅出(1/10):索引简介。堆表:没有聚集索引的表叫堆表。在堆表中的数据存储没有任何顺序... 阅读全文
posted @ 2015-05-12 09:56 Woodytu 阅读(2482) 评论(1) 推荐(6) 编辑
摘要: 这段时间谈了很多页,现在我们可以看下这些页在数据文件里是如何组织的。我们都已经知道,SQL Server把数据文件分成8k的页,页是IO的最小操作单位。SQL Server把数据文件里的第1页标记为0。在所有数据库文件里,前面的9个页面(到页号8)都是如下显示一样的顺序,第10个页(页号9)是启动页... 阅读全文
posted @ 2015-05-11 20:49 Woodytu 阅读(2912) 评论(3) 推荐(3) 编辑
摘要: 今天我们来讨论下批量更改映射(Bulk Changed Map:BCM)页,还有大容量日志恢复模式(bulk logged recovery model)如何运作的。批量更改映射(Bulk Changed Map:BCM):SQL Server使用BCM页来跟踪自上次完全备份后,被大容量日志操作修改... 阅读全文
posted @ 2015-05-10 21:02 Woodytu 阅读(2213) 评论(2) 推荐(0) 编辑
摘要: 我们已经讨论了各种不同的页,包括数据页、GAM与SGAM页、PFS页,还有IAM页。今天我们来看下差异变更页(Differential Change Map:DCM),还有差异备份(differential backups)。差异变更页(Differential Change Map:DCM ) :... 阅读全文
posted @ 2015-05-10 16:48 Woodytu 阅读(2404) 评论(1) 推荐(3) 编辑
摘要: 在以前的文章里,我们讨论了数据页,GAM和SGAM,还有PFS页。今天我们一起来讨论下索引分配映射(Index Allocation Map:IAM)页。在SQL Server 2005和以后的版本里,分配单元(allocation units)以下三个类型:IN_ROW_DATA用于存储堆分区或索... 阅读全文
posted @ 2015-05-09 18:35 Woodytu 阅读(4648) 评论(2) 推荐(5) 编辑
摘要: 我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(Page Free Space (PFS))。PFS在数据文件里是第2页(页号1,页号从0开始),接在文件头(file header,页号0)后。GAM与SGAM是用来跟踪区分配情况,而PFS页是用来跟踪... 阅读全文
posted @ 2015-05-08 20:41 Woodytu 阅读(4018) 评论(2) 推荐(0) 编辑
摘要: 我们知道SQL Server在8K 的页里存储数据。分区就是物理上连续的8个页。当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据。GAM(Global Allocation Map)和SGAM(Shared Global Allocation Map)页用... 阅读全文
posted @ 2015-05-08 14:53 Woodytu 阅读(5613) 评论(3) 推荐(3) 编辑
摘要: 在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下。数据记录存储我们具体的数据,换句话说,它存在堆表里,或者存在聚集索引的叶子节点。数据记录结构是为了让SQL Server更高效的管理数据。我们来看... 阅读全文
posted @ 2015-05-07 21:54 Woodytu 阅读(4193) 评论(0) 推荐(5) 编辑
摘要: 我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。页有不同的类型,像数据页,GAM,SGAM等。在这文章里,让我们一起来理解下数据页结构。SQL Server把数据记录存在数据页(... 阅读全文
posted @ 2015-05-07 14:03 Woodytu 阅读(12084) 评论(16) 推荐(17) 编辑
摘要: 上个星期我向你介绍了堆表(heap tables)。我们说过,在SQL Server表可以是堆表(Heap Table)或者聚集表(Clustered Table)——一个在它上面有聚集索引(Clustered Index)定义的表。今天我们来谈论聚集索引(Clustered Index)的更多细节... 阅读全文
posted @ 2015-05-06 21:07 Woodytu 阅读(2503) 评论(1) 推荐(7) 编辑
摘要: 一个简单的更新查询现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么。这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答。庆幸的是,直到存取方法(Access Methods)前,更新操作和刚才SELECT语句流程是一模一样的。这次存取方法(Acc... 阅读全文
posted @ 2015-05-04 21:43 Woodytu 阅读(3131) 评论(0) 推荐(5) 编辑
上一页 1 ··· 3 4 5 6 7 8 下一页