- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL之MyISAM存储引擎的非聚簇索引详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在InnoDB中索引即数据,也就是聚簇索引的那颗B+树的叶子节点中已经包含了所有完整的用户记录。MyISAM的索引方案虽然也是使用树形结构,但是却将索引和数据分开存储,这种索引也叫非聚簇索引.
create table index_demo( c1 int, c2 int, c3 char(1), primary key(c1)) ROW_FORMAT=COMPACT;
将表中的记录按照记录的插入顺序单独存储在一个文件中,这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少个记录,这样一来,我们就可以通过行号快速访问到一条记录。在表中使用MyISAM作为存储引擎时,它的记录在存储空间中的表示如图:
由于在插入数据时并没有刻意按照主键大小排序,所以我们不能再这些数据上使用二分法进行查找,使用MyISAM存储引擎的表会把索引信息单独存储在另外一个文件中,称为索引文件。MyISAM会为表的主键单独创建一个索引,只不过在索引的叶子节点中存储的不是完整的用户记录,而是主键值和行号的组合。也就是先通过索引找到对应的行号,再通过行号去找对应的记录.
在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录;在MyISAM存储引擎中,需要进行一次回表操作,这也意味着MyISAM中建立的索引相当于全部都是二级索引.
MyISAM会直接在索引叶子节点处存储该条记录在数据文件中的地址偏移量。由此可以看出MyISAM的回表操作时十分快速的,因为它是拿着地址偏移量直接到文件中取数据,而InnoDB是通过获取主键之后再去聚簇索引中找记录,虽然说不慢,但是也比不上直接用地址去访问.
如果有必要,我们也可以为其他列分别建立索引或者建立联合索引,其原理与InnoDB中索引差不多,只不过在叶子节点处存储的是相应的列+行号,这些索引页全部都是二级索引.
可以看到对于非聚簇索引,不管是以主键为排序规则还是以非主键为排序规则,它的结构都是相同的,即叶子节点存放的都是相应的列+行号.
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我的更多内容! 。
原文地址:https://hengheng.blog.csdn.net/article/details/123037513 。
最后此篇关于MySQL之MyISAM存储引擎的非聚簇索引详解的文章就讲到这里了,如果你想了解更多关于MySQL之MyISAM存储引擎的非聚簇索引详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个包含 21 个表的 mysql 数据库,所有表都有关系设置,我在 phpMyAdmin 中与设计师一起制作了它们。我很困惑,因为 MyISAM 不支持关系。除非有我找不到的更新。 是否有更新使
我有一个包含 MyISAM 和 InnoDB 表的 MyISAM 数据库,我想将此数据库迁移到另一台服务器,对于 MyISAM,只需复制 .frm .MYI 和 .MYD 即可,但对于 InnoDB
一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。 2、 磁盘损坏。 3、 服务器死机。
我必须维护一个使用 MyISAM 引擎的 MySQL 数据库。现在数据库太大,每天备份占用空间很大。 我从数据库中删除了数百万条记录,但数据库大小没有减少,备份文件大小更大。 我应该使用 OPTIMI
我正在测试 innoDB 表中的事务支持,出于好奇,我尝试在 MyIsam 表上运行相同的事务,令人惊讶的是它成功了。我假设在 myIsam 表上查询是一个接一个地执行,而不是在一个原子操作中执行,并
各位 我需要从表A(大约6000万条记录和myisam存储引擎)生成一个报告。表 A 每 15 分钟转储一次 cdr 文件。 我想根据(日期至)和(日期自)生成报告 我尝试过的几个场景如下 1)我尝试
我在 Windows Server 2008(具有 4GB RAM)上使用 MySQL 5.1,并具有以下配置: 我有 2 个 MyISAM 表。其中一个位于 1 个数据库 (DB1) 中,有 14
我试图在 MariaDB10.0.14 上执行基准测试,以使用多个线程读取 MyISAM 表上的数据,但我不断收到与主键重复条目有关的异常。 MyISAM支持多线程读取吗?我使用sysbench进行基
我有一台具有 4GB RAM 和 400MB Mysql 数据库 (Myisam) 的单处理器专用服务器,该服务器存在很大的性能问题。该数据库由电子商务使用。我已经尝试使用 mysqltuner 脚本
多线程如何与 MyISAM 配合使用。因为它支持表级锁定?如果我们要求从同一张表中选择。线程在这种情况下如何工作 最佳答案 单独的连接获得单独的线程。单个连接不会使用多个线程。 (MyISAM 和 I
我有以下 2 个相同的表,使用 MySQL: DROP TABLE IF EXISTS `DB`.`tblNew`; CREATE TABLE `DB`.`tblNew` ( `NumberPK`
我可能忽略了一些简单的事情,但几周来我一直在试图了解这里出了什么问题,我需要一双新的眼睛。 我有一个处理 Paypal 付款通知的 CGI 应用程序。当有人订阅时,我实际上会获得一个订阅 IPN,然后
表不断崩溃错误 126 (HY000):表 './DB/Table.MYI' 的 key 文件不正确;尝试修复它 它确实通过修复表修复了,但问题再次出现!而且它的 5G 表需要约 45 分钟才能修复。
我可以使用在 MySQL 5.1.30 上运行的 MyISAM 表创建表空间吗? 最佳答案 表空间(在 MySQL 5.1 中)仅支持 NDB 和 NDBCLUSTER,参见 http://dev.m
基本上,我有一个 lang 表,其中包含 pg VARCHAR(20),id VARCHAR(20),en ( TEXT),ru (TEXT) 用于我的网站的多语言支持,在 99.999% 的情况下,
我的在线拍卖网站已经运行了近 3 年,并且仍然运行良好。三年内,如此多的拍卖已在服务器上列出并完成。但现在有很多负载在服务器上,因为数据库服务器上有很多已完成的现场拍卖。因此网站的性能不再是以前的样子
在 Mysql(5.7 及以上版本)中,用于表的更改跟踪,this approach实现起来非常简单。 但它需要版本表是 MyISAM,它执行表级锁定。 这种方法对于每秒发生多次插入/更新的生产系统是
假设我在 MyISAM 表上进行了一些操作(让它成为 INSERT),并附加了触发器。 我知道 MySQL 在运行此 INSERT 时会执行隐式表锁定。 问题:触发器会在这个隐式锁内部运行吗?触发器中
我有两个表,t1 和 t2,每个表有两列 - id_user 和 age。 如何将 t1.age 更新为 t1.age 和 t2.age 中的最大值以匹配 ID,并保留 t1.age 如果 t2 中没
我有一张测试表。测试表如下: CREATE TABLE `mytest` ( `num1` int(10) unsigned NOT NULL, KEY `key1` (`num1`) )
我是一名优秀的程序员,十分优秀!