聚集索引

聚集索引和非聚集索引

耗尽温柔 提交于 2020-11-01 18:25:24
指的是聚集索引,索引可分聚集和非聚集索引,这两者区别比较多,但是最主要的区别是: 一个表的聚集索引只能有一个,是因为数据行在保存的时候,是按聚集索引的顺序保存的,你可以把它简单的理解成物理存储的位置,这里涉及到页面的概念,你可以查查看。就是物理磁盘上分很多页面,一个有聚集索引的表,他的页面链是按聚集索引排列的,举个例子,如果一个页面已经写满了数据,你要插入一行,如果是非聚集索引,sql会随便找个地方保存,把地址记录进索引,但是如果是聚集索引,会把数据插入到这个页面,而后面的数据同时会往后移动(用页面拆分的办法),看上去速度要慢,但是聚集索引在搜索时,速度会比非聚集索引快,因为他们是物理排序的。 PRIMARY KEY 或 UNIQUE 约束创建聚集或非聚集索引。PRIMARY KEY 约束默认为 CLUSTERED;UNIQUE 约束默认为 NONCLUSTERED。如果表中已存在聚集约束或索引,那么在 ALTER TABLE 中就不能指定 CLUSTERED。如果表中已存在聚集约束或索引,PRIMARY KEY 约束默认为 NONCLUSTERED。 来源: oschina 链接: https://my.oschina.net/u/946962/blog/394169

一文总结分析聚集索引、非聚集索引、覆盖索引的工作原理!

旧街凉风 提交于 2020-04-07 22:47:24
「 数据库 」和「 数据库索引 」这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是开发人员在行业内生存的必备技能。 使用索引很简单,只要能写创建表的语句,就肯定能写创建索引的语句,要知道这个世界上是不存在不会创建表的服务器端程序员的。然而, 会使用索引是一回事, 而深入理解索引原理又能恰到好处使用索引又是另一回事,这完全是两个天差地别的境界(我自己也还没有达到这层境界)。很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止。 1、为什么要给表加上主键? 2、为什么加索引后会使查询变快? 3、为什么加索引后会使写入、修改、删除变慢? 4、什么情况下要同时在两个字段上建索引? 这些问题他们可能不一定能说出答案。知道这些问题的答案有什么好处呢?如果开发的应用使用的数据库表中只有1万条数据,那么了解与不了解真的没有差别, 然而, 如果开发的应用有几百上千万甚至亿级别的数据,那么不深入了解索引的原理, 写出来程序就根本跑不动,就好比如果给货车装个轿车的引擎,这货车还能拉的动货吗? 接下来就讲解一下上面提出的几个问题,希望对阅读者有帮助。 网上很多讲解索引的文章对索引的描述是这样的「索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容」,这句话描述的非常正确, 但就像脱了裤子放屁,说了跟没说一样

T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html

让人想犯罪 __ 提交于 2020-04-03 21:48:14
T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因。   经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表甚至有上千万行数据,测试团队开始在生产数据库上测试,发现订单提交过程需要花5分钟时间,但在网站上线前的测试中,提交一次订单只需要2/3秒。   类似这种故事在世界各个角落每天都会上演,几乎每个开发人员在其开发生涯中都会遇到这种事情,我也曾多次遇到这种情况,因此我希望将我解决这种问题的经验和大家分享。   如果你正身处这种项目,逃避不是办法,只有勇敢地去面对现实。首先,我认为你的应用程序中一定没有写数据访问程序,我将在这个系列的文章中介绍如何编写最佳的数据访问程序,以及如何优化现有的数据访问程序。    范围   在正式开始之前,有必要澄清一下本系列文章的写作边界,我想谈的是“事务性(OLTP)SQL Server数据库中的数据访问性能优化”,但文中介绍的这些技巧也可以用于其它数据库平台。  

九、索引(需大量数据进行实践练习)

≯℡__Kan透↙ 提交于 2020-03-26 14:34:49
聚集索引:数据行的物理地址顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有 一个聚集索引 。 非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。(非聚集索引就像新华字典的 偏旁字典 ,他结构顺序与实际存放顺序不一定一致) 索引在MySQL中也叫做“键”或者"key"(primary key,unique key,还有一个index key),是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少io次数,加速查询。(其中primary key和unique key,除了有加速查询的效果之外,还有约束的效果, primary key 不为空且唯一,unique key 唯一,而index key只有加速查询的效果,没有约束效果 ) ​ 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 ​ 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 ​ 强调:一旦为表创建了索引,以后的查询最好先查索引,再根据索引定位的结果去找数据 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引.

第七章——设计和调整索引

杀马特。学长 韩版系。学妹 提交于 2020-03-18 21:44:41
要定义一个在任何地方都有效的索引策略是不可能的。因为每个系统都是独一无二的,都需要基于工作量的索引方法,业务需求和其他的一些因素。然而,有一些设计方面的考虑和准则,可以适用于每一个系统。 当我们要优化现有系统时,也是这样。而优化是一个迭代过程,每个案例中都是独一无二的,有一系列技术可以用来检测数据库系统每个案例中的低效率的例子。 在本章中,我们将介绍一些重要的因素,在设计新索引和优化现有系统时需要牢记这些因素。 分类索引设计考虑因素 每次更改聚集索引键的值,都会发生两件事。第一件事就是sql服务器在聚集索引页链和数据文件中把行移动到不同位置。第二,它更新聚集索引键的行号。所有非聚集索引都要存储、更新行标识。但就 输入 /输出端口而言,在批量更新的情况下会 特别很贵。而且,在行 id大小增加的情况下,它会增加群集索引和非群集索引的碎片化。因此,最好是有一个静态的聚集索引,因为它关键值不会改变。 所有非聚集索引都使用聚集索引键作为行 id。太宽泛的聚集索引键会增加非聚集索引行的大小,而且需要更多空间来存储它们。结果就是sql服务器在索引或范围扫描操作中需要处理更多的数据页,会索引降低效率。在非唯一非聚集索引的情况下,行id也存储在非叶索引级别,反过来,减少每页索引记录的数量,会导致索引中额外的中间级别。即使非叶索引级别通常缓存在内存中

SqlServer索引的原理与应用

你离开我真会死。 提交于 2020-03-18 20:08:50
from:http://www.cnblogs.com/knowledgesea/p/3672099.html 索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面

SqlServer索引的原理与应用

跟風遠走 提交于 2020-03-18 20:08:05
原文: SqlServer索引的原理与应用 索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息

SqlServer索引的原理与应用

时光毁灭记忆、已成空白 提交于 2020-03-18 20:06:49
转自: http://www.cnblogs.com/knowledgesea/p/3672099.html 索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。(补充:加快从表或视图中检索行的速度) 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里

SqlServer索引的原理与应用

荒凉一梦 提交于 2020-03-18 20:06:31
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页

SqlServer索引的原理与应用

孤人 提交于 2020-03-18 20:05:35
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页