网站建设国外,镇江建站推广报价,创建5a 网站建设要求,长春火车站是哪个区mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码#xff08;进阶#xff09; 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法
索引的语法#xff1a;创建、修改、增加、删除等操作#x… mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码进阶 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法
索引的语法创建、修改、增加、删除等操作查询此链接 菜鸟教程-MySQL 索引 or Mysql索引一篇就够le
2 索引类别
mysql使用较多的存储引擎InnoDB、MyISAM等其中InnoDB支持的索引是B树索引、Hash索引、全文索引MyISAM使用的是Hash索引。 有关 mysql 所有的索引类型参考官网 官网
我们可以按照四个角度来分类索引。
按「数据结构」分类Btree索引、Hash索引、Full-text索引。 按「物理存储」分类聚簇索引主键索引、二级索引辅助索引。 按「字段特性」分类主键索引、唯一索引、普通索引、前缀索引。 按「字段个数」分类单列索引、联合索引。
3 索引原理
以下内容磁盘IO与预读、索引数据结构 B树、索引使用策略及优化学自此文章的前半部分内容 MySQL索引原理及慢查询优化
数据库数据保存在磁盘上且为了提高性能每次只将部分数据读入内存众所周知访问磁盘的成本是访问内存的十万倍左右因此我们需要一种高效的搜索方式。
磁盘IO与预读
为什么访问磁盘的成本很高访问磁盘的操作有哪几步它们所用的时间 考虑到磁盘IO是非常高昂的操作操作系统做了哪些优化
索引数据结构 B树
根据磁盘IO的特点我们的诉求每次查找数据时将磁盘的IO次数控制在很小的数量级最好是常数数量级于是 B 树应运而生。
B树的前生今世
想要介绍 B 树就不得不提起二叉查找/排序树BST、平衡二叉树(AVL) 和 B 树这三种数据结构。B 树就是从它们三个演化而来的。见此文章。 二叉树、平衡二叉树、B-Tree、BTree 说明
此文章也讲了一系列树的演变并且还讲解了B树的结点定义、插入、删除等的过程以及R树可补充看 从B树、B树、B*树谈到R 树
B 树代码进阶
B树重要性不用多说一起来研究B树的源码
4 索引使用策略及优化
创建索引的几大原则 1.最左前缀匹配原则非常重要的原则mysql会一直向右匹配直到遇到范围查询(、、between、like)就停止匹配比如a 1 and b 2 and c 3 and d 4 如果建立(a,b,c,d)顺序的索引d是用不到索引的如果建立(a,b,d,c)的索引则都可以用到a,b,d的顺序可以任意调整。
2.和in可以乱序比如a 1 and b 2 and c 3 建立(a,b,c)索引可以任意顺序mysql的查询优化器会帮你优化成索引可以识别的形式。
3.尽量选择区分度高的列作为索引区分度的公式是count(distinct col)/count(*)表示字段不重复的比例比例越大我们扫描的记录数越少唯一键的区分度是1而一些状态、性别字段可能在大数据面前区分度就是0那可能有人会问这个比例有什么经验值吗使用场景不同这个值也很难确定一般需要join的字段我们都要求是0.1以上即平均1条扫描10条记录。
4.索引列不能参与计算保持列“干净”比如from_unixtime(create_time) ’2014-05-29’就不能使用到索引原因很简单b树中存的都是数据表中的字段值但进行检索时需要把所有元素都应用函数才能比较显然成本太大。所以语句应该写成create_time unix_timestamp(’2014-05-29’)。
5.尽量的扩展索引不要新建索引。比如表中已经有a的索引现在要加(a,b)的索引那么只需要修改原来的索引即可。
优化索引的几种方法
源自优化索引的几种方法
前缀索引优化覆盖索引优化主键索引最好是自增的防止索引失效
索引常见面试题
来自 索引常见面试题
什么是索引索引的分类从四个角度进行分类B树索引原理查找过程为什么 MySQL InnoDB 选择 Btree 作为索引的数据结构B树的优势联合索引什么时候需要 / 不需要创建索引etc.
面经实战
MySQL的 InnoDB 索引数据结构mysql中 inoodb 的索引有哪些种类B树索引具体是怎么实现的B树与B树的区别为什么B树的中间节点不储存数据给一个索引在有的查询过程中他没有走索引查询说说你能想到的原因聚簇索引、非聚簇索引聚簇索引比非聚簇索引的优点