聚集索引

MySQL学习之索引

十年热恋 提交于 2019-12-16 22:53:52
目录 为什么需要索引 索引是什么 索引的本质 索引的目的 索引的副作用 索引的多与少 预读 索引的两大类型 索引的实现方式 b+树索引的分类 索引的种类 索引总结 为什么需要索引 在平常的应用系统中,一般的插入和修改操作很少出现性能方面的问题, 平时我们常遇到的、也是最容易出现问题的还是查询操作,所以对查询语句的优化是非常重要的。 索引可以在不读取整个表的情况下,使数据库应用程序可以更快地查找数据。 索引是什么 索引在MySQL中也称为“键”,是存储引擎快速查找到记录的一种数据结构。 索引的本质 本质就是不断地缩小想要查询数据内容的范围来获取最终我们想要的结果, 同时将随机事件变成顺序事件 索引的目的 加快数据的查询速度 索引的副作用 索引会减慢数据插入和更新的速度 更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新 因此,理想的做法是仅仅在常常被搜索的列 ( 以及表 ) 上面创建索引 索引的多与少 不管索引多还是少都会出现性能问题,所以需要找到一个平衡点。 预读 当经历一次IO时,OS不光把当前磁盘地址的数据读入内存, 还把相邻的磁盘地址的数据读入内存缓冲区内。 经历一次IO读入的数据称之为页,具体多少与OS有关 索引的两大类型 索引的两大类型hash与btree hash类型的索引:查询单条快,范围查询慢 btree类型的索引:b+树

聚簇索引和非聚簇索引实际上是什么意思?

ぃ、小莉子 提交于 2019-12-13 10:39:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我对DB的接触有限,只使用DB作为应用程序程序员。 我想了解 Clustered 和 Non clustered indexes 。 我搜索了一下,发现的是: 聚集索引是一种特殊的索引,它重新排序表中记录的物理存储方式。 因此,表只能有一个聚集索引。 聚集索引的叶节点包含数据页。 非聚集索引是一种特殊类型的索引,其中索引的逻辑顺序与磁盘上行的物理存储顺序不匹配。 非聚集索引的叶节点不包含数据页。 相反,叶节点包含索引行。 我在SO中发现的是 聚集索引和非聚集索引之间的区别 是 什么? 。 有人可以用简单的英语解释吗? #1楼 聚集索引意味着您要告诉数据库在磁盘上存储实际上彼此接近的关闭值。 这具有快速扫描/检索落入聚集索引值范围内的记录的好处。 例如,您有两个表Customer和Order: Customer ---------- ID Name Address Order ---------- ID CustomerID Price 如果希望快速检索一个特定客户的所有订单,则可能希望在“订单”表的“客户ID”列上创建聚簇索引。 这样,具有相同CustomerID的记录将在物理上彼此靠近存储在磁盘上(成簇),从而加快了检索速度。 PS客户ID上的索引显然不是唯一的,因此您要么需要添加第二个字段来“统一”索引

数据库——>索引的分类

偶尔善良 提交于 2019-12-11 01:14:27
索引类型: 聚集索引; 非聚集索引; 唯一索引; 组合索引; 顺序文件上的索引; B+树索引; 散列索引; 位图索引; ①聚集索引 聚集索引对表的物理数据页中的数据按列进行排序 , 然后再 重新存储到磁盘上 ,即 聚集索引与数据是混为一体的 。聚集索引和数据库中记录的物理顺序与索引顺序相同。 一个表中只能有一个 聚集索引 。 聚集索引可引用与下面的几种情况: 1.包含大量非重复数值的列。 2.使用下列运算符返回一个范围值的查询: BETWEEN、>、>=、<和<=。 3.被连续访问的列。 4.返回大型结果集的查询。 5.经常呗使用联接或GROUP BY子句查询访问的列。 ②非聚集索引 非聚集索引与聚集索引一样有B-树结构,但有差别: 数据行 不按 非聚集索引键的顺序排序和存储。 非聚集索引中,数据表中记录的物理顺序与索引顺序可以不相同。 一个表中可以有多个非聚集索引。 数据与索引存储再不同的位置。 ③唯一索引 唯一索引(Unique Index)表示 表中任何两笔记录的索引值都不相同 ,与表的主键类似。它可以确保索引不包含重复的值。再多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。 ④组合索引 组合索引是 将两个或者多个字段组合起来的索引 ,而单独的字段允许不是唯一的值。 来源: CSDN 作者: papaxiong1 链接: https://blog.csdn

通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍

情到浓时终转凉″ 提交于 2019-12-10 23:50:54
原文: 通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍 通过非聚集索引,可以显著提升count(*)查询的性能。 有的人可能会说,这个 count(*)能用上索引吗, 这个 count(*) 应该是通过表扫描来一个一个的统计,索引有用吗? 不错,一般的查询,如果用索引查找,也就是用Index Seek了,查询就会很快。 之所以快,是由于查询所需要访问的数据只占整个表的很小一部分,如果访问的数据多了,那反而不如通过表扫描来的更快,因为扫描用的是顺序IO,效率更高,比运用随机IO访问大量数据的效率高很多。 相应的,如果只需要访问少量数据,那么索引查找的效率远高于表扫描,因为通过随机IO来访问少量数据的效率远高于通过顺序IO来访问少量数据,之所以扫描的效率较低是由于扫描访问了很多不需要的数据 。 那么,通过非聚集索引,提升select count(*) from 的查询速度的本质在于,非聚集索引所占空间的大小往往,远小于聚集索引或堆表所占用的空间大小; 同样的,表中占用较少字节的字段的非聚集索引,对于速度的提升效果,也要远大于,占用较多字节的字段的非聚集索引,因为占用字节少,那么索引占用的空间也少,同样是扫描,只需要更少的时间,对硬盘的访问次数也更少,那么速度就会更快了。 下面通过一个实验,来说明非聚集索引为什么能提高count(*)的查询速度。

SQLSERVER中的假脱机

允我心安 提交于 2019-12-06 11:41:23
原文: 性能调优6:Spool 假脱机调优 SQL Server的Spool(假脱机)操作符,用于把前一个操作符处理的数据(又称作中间结果集)存储到一个隐藏的临时结构中,以便在执行过程中重用这些数据。这个临时结构都创建在tempdb中,通常的结构是工作表(worktable)和工作文件(workfile)。假脱机运算符会取出表或索引结构中的一部分的数据集,将他们存放在tempdb数据库的临时结构里,我推测:如果这个临时结构用于存储表数据,称作worktable;如果这个临时结构存储的是Hash表,称作workfile。 SQL Server使用Spool操作符的优点是: 数据或中间结果集会被多次重用 使假脱机数据与源数据保持隔离 一,Spool操作的分类 在执行计划中,Eager Spool和Lazy Spool是逻辑操作符,这两个逻辑操作符之间的区别是: Eager Spool:一次性把所有数据存储到临时结构中,它是一个阻塞性的操作符,这意味着它需要读取输入中的所有数据,然后处理完所有的数据行之后,才向下一个操作符返回结果,也就是说,除非Eager Spool把所有的数据行都处理完成,否则无法访问到这些数据。 Lazy Spool:逐行把数据存储到临时结构中,它是一个非阻塞性的操作符,这意味着它可以边读取数据,边向下一个操作符输出数据,也就是说,在Lazy

聚簇索引与非聚簇索引的区别

蹲街弑〆低调 提交于 2019-12-05 09:33:17
众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引。这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。 SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。 MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,全文索引。 (1) 聚集索引 聚集索引 是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。如果某索引不是聚集索引,则表中的行物理顺序与索引顺序不匹配,与非聚集索引相比,聚集索引有着更快的检索速度。 (2) 非聚集索引 非聚集索引是一种 索引 ,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。 参考博客: 聚簇索引和非聚簇索引的理解 来源: https://www.cnblogs.com/2019wxw/p/11919371.html

MySQL用B+树做索引

非 Y 不嫁゛ 提交于 2019-12-05 03:15:26
索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在mysql数据库中分三类: B+树索引、Hash索引、全文索引 我们今天要介绍的是工作开发中最常接触到innodb存储引擎中的的B+树索引。 要介绍B+树索引,就不得不提二叉查找树,平衡二叉树和B树这三种数据结构。B+树就是从他们仨演化来的。 二叉查找树 首先,让我们先看一张图  从图中可以看到,我们为user表(用户信息表)建立了一个二叉查找树的索引。图中的圆为二叉查找树的节点,节点中存储了键(key)和数据(data)。 键对应user表中的id,数据对应user表中的行数据。二叉查找树的特点就是 任何节点的左子节点的键值都小于当前节点的键值,右子节点的键值都大于当前节点的键值。 顶端的节点我们称为根节点,没有子节点的节点我们称之为叶节点。 如果我们需要查找id=12的用户信息,利用我们创建的二叉查找树索引,查找流程如下: 1.

测试基础-数据库索引

大城市里の小女人 提交于 2019-12-04 21:25:21
重点: 了解索引的概念,类型 掌握创建索引的方法 掌握如何修改,删除索引 索引 概念:索引是一个单独的,物理的数据库结果 是某个表一个列或者若干列的集合和相应指向表中物理标识这些值得数据页的逻辑指针清单 依赖与表 表的储存分为两部分 存储表的数据页 存储表的索引页,索引 存储表的数据页 存储表的索引页,索引 数据查询,系统会先查询索引页,从中找到指向所查数据的索引,然后通过索引查询数据 索引有数据库自动管理和维护 索引只是提供了一种快速访问指定数据的方法 索引的类型 根据类型分 聚集索引 非聚集索引 根据作用分 唯一索引:唯一索引不允许两行具有相同的索引值 索引视图 全文索引 XML索引 主键索引:特殊的唯一索引 聚集索引和非聚集索引 正文内容本身就是一种按照一定规则排列的目录称为“聚集索引” 这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”   其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音 排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那 么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说

[转帖]聚集索引和非聚集索引

我怕爱的太早我们不能终老 提交于 2019-12-04 10:10:40
聚集索引和非聚集索引 2013-07-23 15:53:26 huashanlunjian 阅读数 26 更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/huashanlunjian/article/details/84461527 聚集索引和非聚集索引 聚集索引:表的物理存储按照索引顺序排序。 非聚集索引:表的物理存储不按照索引顺序排序。 聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入)。但在范围查询数据比非聚集数据的速度快。 为什么聚集索引的范围查询会快呢?这里用ORACLE的聚簇因子来说明。 聚簇因子(CLUSTERING_FACTOR) 聚簇因子是ORACLE用来表示索引顺序和表顺序相似程度的。聚簇因子越小,相似度越高,聚簇因子越大,相似度越低。 当clustering factor 很高时,说明index entry(rowid) 是随机指向一些block的,在一个大的index range scan时,这样为了读取这些rowid 指向的block,就需要一次有一次重复的去读这些block。当clustering factor 值低时,说明index keys(rowid)

sqlserver中聚集索引和非聚集索引

≡放荡痞女 提交于 2019-12-04 06:42:19
微软官网上的解释: 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。 表或视图可以包含以下类型的索引: 聚集 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。 索引定义中包含聚集索引列。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。 如果表具有聚集索引,则该表称为聚集表。 如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。 非聚集 非聚集索引具有独立于数据行的结构。 非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。 从非聚集索引中的索引行指向数据行的指针称为行定位器。 行定位器的结构取决于数据页是存储在堆中还是聚集表中。 对于堆,行定位器是指向行的指针。 对于聚集表,行定位器是聚集索引键。 可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制,并执行完整范围内的索引查询。 聚集索引和非聚集索引都可以是唯一的。 这意味着任何两行都不能有相同的索引键值。 另外,索引也可以不是唯一的,即多行可以共享同一键值。 实际上,可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引