一 简介:今天咱们来介绍下index的一些东西

二 数据的基本存储结构

1 磁盘空间被划分为许多大小相同的块(Block) 在内存中读出是页(Page)。
   2 一个表的这些数据块以链表的方式串联在一起。
   3 数据是以行(Row)为单位一行一行的存放在磁盘上的块中,在内存中一页至少存储2行(16KB的情况下)
   4 在访问数据时,一次从磁盘中读出或者写入至少一个完整的Block/Page。 
   磁盘示意
   block=>(row,row,row)
   block=>(row,row)
   block=>(row)

三  对于DML操作的具体精准解释

select

1 定位数据
  2 读出数据所在的块,对数据加工(运算排序等操作)
  3 返回数据给用户
UPDATE、DELETE
 1 定位数据
 2 读出数据所在的块,修改数据
 3 写回磁盘
索引操作
delete
1 在Clustered B+Tree上删除一条记录。
2 在所有Secondary B+Tree上删除二级索引的记录。
update
非主键列
1 在Clustered B+Tree上更新数据。
主键列
1 Clustered B+Tree删除原有的记录(只是标记为DELETED,并不真正删除)。
2 在Clustered B+Tree插入一条新的记录。
3 在每一个Secondary B+Tree上删除原有的记录。(有疑问,看下一节。)
4 在每一个Secondary B+Tree上插入一个条新的记录。
更新键列时,需要更新多个页,效率比较低。
A. 尽量不用对主键列进行UPDATE操作。
B. 更新很多时,尽量少建索引。
INSERT
1 定位数据要插入的页(如果数据需要排序)
2 读出要插入的数据页,插入数据.
3 写回磁盘

四  簇聚索引

特点:

1 一个表只能有一个Clustered Index,因为数据只能根据一个键排序.叶子节点通过链表来进行连接

2 聚簇索引中的每个叶子节点包含主键值、事务ID、回滚指针(rollback pointer用于事务和MVCC)和余下的列值,非叶子节点包含主键和指向叶子节点的指针

3 用其他的键来建立索引树时,必须要先建立一个dense索引层,在dense索引层上对此键的值进行排序。这样的索引树称作Secondary Index. 一个表上可以有多个Secondary Index,并且每个辅助索引维护一个单独的B-TREE树,里面包含辅助索引的值和对应的主键

每次DML操作大多都会维护相关树,这是为什么不能一张表拥有太多索引的原因,会加大维护成本

4  对簇索引进行遍历,实际上就是对数据进行遍历。因此簇索引的遍历效率比辅助索引低。如SELECT COUNT(*) 操作,查询优化器一般会选择使用辅助索引遍历的效率更高。

五 查询顺序

1 用主键查询
    直接在Clustered B+Tree上查询。
  2  用辅助索引查询
   1 在Secondary B+Tree上查询到主键。
   2 用主键在Clustered B+Tree上查询到数据。

六 在InnoDB表中按照主键顺序插入行

1  主键的值时顺序的,索引InnoDB 把每一条记录都存储在上一条记录的后面。当达到页的最大填充因子时(InnoDB 默认的最大填充因子是页大小的15/16 ,留出部分空间用于以后修改),下一条记录就会写入到新的页中。一旦数据按照这种顺序的方式加载,主键页就会近似于被顺序的记录填满,这也正是所期望的结果

2 非自增ID主键顺序的插入

因为新的行的主键值不一定比之前插入的大,所以InnoDB 无法简单的总是把新行插入到索引的最后,写入是乱序的,InnoDB 不得不频繁的做分页操作,以便为新的行分配空间。页分裂会导致移动大量数据,一次插入最少需要修改三个页面,而不是一个页。由于频繁的页分裂,页会变得稀疏,并且被不规则的填充,所以最终数据会有碎片。

mysql 原理~ index的详解的更多相关文章

  1. MySQL性能分析, mysql explain执行计划详解

    MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...

  2. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  3. mysql配置文件my.cnf详解

    原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...

  4. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  5. mysql学习3:mysql之my.cnf详解

    mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...

  6. MySQL权限授权认证详解

    MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...

  7. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

  8. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  9. MySQL 语句执行过程详解

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

随机推荐

  1. BZOJ4448[Scoi2015]情报传递——主席树+LCA

    题目描述 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有)下线,除1名大头目外其余n-1名情报员有且仅有1名上线.奈特公司纪律森严 ...

  2. Vue模板 script部分

    <script> export default { name: "Home", data() { return {}; }, methods: { // 组件的方法 } ...

  3. Js更改样式导致hover效果消失

    [问题来源] 今天做单次倒计时,利用JS更改了button样式之后,再次点击时,发现hover效果消失. 原因: CSS的优先级问题导致 [解决方法] 利用!important提高hover的优先级 ...

  4. lightoj1038(数学期望dp)

    题意:输入一个数N,N每次被它的任意一个因数所除 变成新的N 这样一直除下去 直到 N变为1 求变成1所期望的次数 解析: d[i] 代表从i除到1的期望步数:那么假设i一共有c个因子(包括1和本身) ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛 J. Ka Chang (分块思想)

    题目链接:https://nanti.jisuanke.com/t/31451 题意: 给你一颗树,树上各点有初始权值,你有两种操作: 1. 给树中深度为l的点全部+x,(根节点为1,深度为0) 2. ...

  6. 洛谷 P2420 让我们异或吧 解题报告

    P2420 让我们异或吧 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B ...

  7. 洛谷P4364 IIIDX

    题意:给定n个数和k,把n个数排成序列,满足ai >= ai/k,并使之字典序最大. 解:毒瘤线段树贪心... 以i/k为i的父亲构树. 当这n个数不同的时候,直接后序遍历贪心即可. 正解神奇的 ...

  8. A1032. Sharing

    To store English words, one method is to use linked lists and store a word letter by letter. To save ...

  9. 【POJ3349】snowflakes

    这是一道可以练习哈希表的模板题.关于哈希表的操作均有涉及. 哈希函数的选取是这道题的关键.这道题的关键字是一个长度为6的序列,并且序列与开始顺序.时钟顺序均无关. 因此,采用哈希函数\(H[x]=\S ...

  10. .net Forms身份验证不能用在应用的分布式部署中吗?

    参照网上的一些方法,使用Forms身份验证对应用进行分布式部署,发现没有成功. 应用部署的两台内网服务器:192.168.1.19,192.168.1.87,使用Nginx做负载分配,配置完全相同:每 ...