首页

文章

索引到底是什么?

发布网友 发布时间:2022-03-12 10:27

我来回答

1个回答

热心网友 时间:2022-03-12 11:56

他加快主要是靠另外建了个树,专门用来定位。
关键字其实就是一种唯一索引。

参考一下
http://www.z6688.com/info/38907-1.htm

innodb 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构
mysql 在数据库目录下的 .frm 文件中存储它的数据字典信息。但是每个 innodb 类型表也同样在 innodb 表空间内的内部的数据字典中存在它自己的进入点。当 mysql 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 innodb 的数据字典中相对应的进入点。这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 innodb 类型表的原因,以及为什么在 mysql 版本 <= 3.23.43 的版本中,drop database 不能用于 innodb 表的原因。

每一个 innodb 表都有一个被称为聚簇索引的特殊索引用于保存记录行信息。如果一个表定义一个 primary key ,那么主键的索引就是聚簇索引。

如果表没有定义一个 primary key ,mysql 将选出第一个 not null 字段的 unique 键做为主键,innodb 也将用这个键的索引做为聚簇索引。如果表中没有这样的键,innodb 将在内部产生一个聚簇索引,它是由按 innodb 分配给它们的 row id 顺序排序的记录行组成。这个 row id 是一个单调地增加并插入新行的 6-byte 字段。因而由 row id 排序的记录顺序也就是插入时的物理顺序。

通过聚簇索引访问一个记录行是非常快的,因为记录行数据与引导我们查找到它的索引在同一个页面上。 在大多数的数据库系统中记录行数据与索引记录通常并不是放在同一个页面上的。如果一个表太大了,那么聚簇索引体系通常比传统的方式更能减少磁盘 i/o 。

在非-聚簇索引(non-clustered indexes)中的记录 (我们通常称它为辅助索引secondary indexes),在 innodb 中会为这行包含主键值。innodb 将使用这个主键值来在聚簇索引中查找这行。注意如果主键太长,那么辅助索引将会占用更多的空间。

innodb 在比较不同长度的 char 和 varchar 时,较短字串的多余长度将被空格(spaces)填充。
11.1 索引的物理结构
all indexes in innodb 中所有的索引是索引记录存放在树的叶页面(leaf pages)上的 b-trees。一个索引页面的大小默认为 16 kb。当新的记录被插入时,innodb 将试图为将来的插入与更新索引记录保留页面的 1 / 16 空余。

如果索引记录以一个连续的 (升序或降序) 被插入,那么索引页面的将会被使用约 15/16 。如果以一个随机的顺序插入,那么页面大约使用了 1/2 - 15/16 。如果一个索引页面被撤销(drop)地低于 1/2,那么 innodb 将缩短索引树并释放页面空间。
11.2 插入缓冲
主键是一个唯一标识符,新的记录以主键的升序被插入,这在数据库系统中是一个普遍的情形。因而在聚簇索引内插入的值不需要在硬盘上随意读取。

另一方面,辅助索引通常是非唯一的(non-unique),插入在辅助索引中是相当随意的顺序。如果在 innodb 中不使用一个特殊的机制这将会引起大量随机的磁盘 i/o。

如果一个索引记录被插入到一个非唯一的辅助索引中去,innodb 将检查辅助索引页面是否已在缓冲池(buffer pool)中。在这种情形下,innodb 直接地将它插入到索引页面中去。但是,如果在缓冲池中没有发现索引页面,inndb 将索引记录插入到一个特殊的插入缓冲结构中去。插入缓冲被控制地如些小以至于可以完全放在缓冲池中, 因而插入速度很快。

插入缓冲会定时地归并到数据库中的辅助索引树中去。为了减少磁盘 i/o,通常将同一个页面上的几个插入同时归并到索引树上。插入缓冲可以提高向一个表中插入速度 15倍。
11.3 适应性的散列索引 (adaptive hash indexes)
如果一个数据库几乎占满了所有主同存,那么在其上运行查询的一个快捷之路就是使用散列索引(hash indexes)。innodb 有一个用于监视在表定义的索引上的索引搜索动作的自动调整结构,如果 innodb 发现一个散列索引对查询有益,那么它将自动地建造这个散列索引。

但是要注意地就是散列索引通常是基于表中已存在的 b-tree 创建的。innodb 可能通过 b-tree 中定义的任何长度的键的前缀来构建散列索引,这依赖于 innodb 观察 b-tree 上索引的模式。一个散列索引可以是部分的:它在缓冲池中并不需要有整个 b-tree 索引的高速缓冲。innodb 按照需要来为经常访问的索引页面构建散列索引。

在理论上,通过这个适应性的散列索引机制,innpdb 使它自己更适合于大的主存(ample main memory),更接近于主存储器数据库系统体系(the architecture of main memory databases)。
11.4 记录的物理结构 innodb 中每个索引记录都包含一个 6 字节的头。这个头部用于联连相连贯的记录,也同样用于行锁定。 聚簇索引中的记录包含了所有用户定义的字段。另外,有一个 6-byte 字段用于记录事务 id(transaction id)和一个 7-byte 字段用于行指针(roll pointer)。 在一个表中,如果用户没有定义一个主键,那么每个聚簇索引记录包含一个 6-byte 的行 id 字段(row id field)。 每个辅助索引记录包含为聚簇索引键定义的所有字段。 一个索引包含着一个指向对应字段记录的指针。如果一个记录的所有字段总长度< 128 bytes,那么这个指针为 1 byte,否则为 2 bytes。 innodb 在内部也是以一个固定长度来存储定长的字符型字段,比如 char(10)。对于 varchar 型字段,innodb 将截去结尾的空间。注意,mysql 可能内部地将 char 转换为 varchar。查看 mysql 用户手册有关“列规约的默认地改变”( silent column specification changes)。 如果存储一个变长的字段,一个 sql null 为一个 0 bytes 被存储,但是如果是一个定长字段将以固定的长度被存储。以相应的 nulls 存储定长的空间的目的地就在于在将 null 字段值更新为 非 null 的值时不至产生索引页面的磁盘碎片。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
怎样让孩子主动找老师补课? 表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 软柿子的热量 孕妇可以吃软柿子吗不是西红柿 脆柿子和软柿子的区别 脆柿子好还是软柿子好 软柿子可以多吃吗 “鱼悬洁白振清风”的出处是哪里 用大自然的声音评课好吗? 妇产科博士找超声科工作容易吗 怎能把微信6.2.0版本换回6.1.2版 微信群6.2.4怎么增加人数上限 微信6.2.2如何备份手机通讯录 电脑桌面图标不能放大? 有什么好用的识图软件 识图认人哪个软件最好 手机识图软件什么软件能识别图片位置 小米手机自动锁屏时间怎么修改 小米手机屏幕锁定时间设置教程 能举起100斤算大力吗 中医美容专业是什么 中医美容证有什么用 单声道音频什么意思(开启单声道音频有什么好处) 单声道音频是什么,有什么用处? 户口还未迁移到婆家 娘家户口怎么就没了呢 我结婚没有迁户口,现在娘家也没有怎么办 没领证生的孩子一般会判给谁 没领证生的孩子会判给谁 信用卡卡种有哪些 找一首古风歌曲 男声 低配电脑装w10还是w7流畅 电脑配置低装win7还是win10好 低配电脑适合装WIN7系统还是WIN10系统? ...500s-15isk这个联想笔记本的内存条尺寸是什么型号的有没有知道的... 越快越好.怎样减肥.而且胸部不缩水 请问徐闻县海安长途汽车客运站客服是多少? 过了平台期还会瘦吗 悦耳的意思悦耳的解释 重庆师范大学应用心理学专业的权威性如何? 打印机laserjetm1136mfp怎样设置无线打印 什么是索引? 百度索引是什么意思 作者索引是什么意思 数据库索引是什么意思 干什么 请说的通俗一点 谢谢 什么是索引 表的索引是什么意思 启用索引是什么意思 索引项、索引值 到底分别指什么? 收录索引是什么意思 数据库中的索引是什么意思? 什么叫索引?索引的作用和分类 索引是什么 “索引”是什么意思? 索引是什么意思? 索引 是什么意思? 索引是什么意思 梦到女鬼嘴角两边有血 梦见嘴角列开流盐血 梦见陌生老头嘴角带血要吃我? 梦见自己满脸是血。左边嘴角有血,右边脸上有个血印,但是没有疼痛感,血好像还不是我的,求解梦。谢谢 标题索引什么意思? 梦见被别人剪头发,很生气是什么意思 女人梦见到鲜花 梦到种花是什么意思 做梦梦见鲜花是什么. 梦见花、花束、花环、花枯萎、鲜花是什么意思,代表什么 女人梦见好多鲜花有什么寓意 梦见给别人花 梦见一个小男孩在床上滚来滚去不睡觉? 梦见孩子晚上不睡觉在屋里骑自行车 周公解梦梦到孩子不睡觉我打孩子 最近晚上老是梦见小孩是什么意思 我在孩子面前说我梦到去世的姥姥孩子害怕的不睡觉? 小孩4岁了,在没有睡着时说,“晚上做梦怎么办,我不想做梦,害怕做梦,睡不着老想做梦的事”不知是什么 小朋友上了幼儿园不睡觉,害怕做梦,回家后还得开着灯睡是什么情况,需要怎么引 梦见左手做针灸流血 梦到被针炙扎脚出血了是什么意思 m.sosuo.name 梦见背后扎针灸流好多血 梦见自己扎针腿上流血是什么意思 梦见给病号扎针灸扎到胳膊动脉出血了是什么意思
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com