可不可以帮我查一下敏 捷 缀在《新华字典》第11版多少页吗?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

索引用来快速地寻找那些具有特定值的记录。如果没有索引一般来说执行查询时遍历整张表。

索引的原理很简单就是把无序的数据变成有序的查询

  • 把创建了索引的列的内容进行排序
  • 在倒排表内容上拼上数据地址链
  • 在查询的时候,先拿到倒排表内容再取出数据地址链,从而拿到具体数据

mysql通过存储引擎取数据基本上90%的人用的就是InnoDB了,按照实现方式分InnoDB的索引类型目前只有两种:BTREE(B树)索引和HASH索引。B树索引是Mysql数据库中使用最频繁的索引类型基本所有存储引擎都支持BTree索引。通常我们说嘚索引出意外指的就是(B树)索引(实际是用B+树实现的因为在查看表索引时,mysql一律打印BTREE所以简称为B树索引)

  • 主键索引区:PI(关联保存的时數据的地址)按主键查询,
  • 普通索引区:si(关联的id的地址,然后再到达上面的地址)。所以按主键查询,速度最快
  • n棵子tree的节点包含n个关键字用来保存数據而是保存数据的索引。
  • 所有的叶子结点中包含了全部关键字的信息及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小洎小而大顺序链接
  • 所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字
  • B+ 树中,数据对象的插入和删除仅在叶节点上进行
  • B+树有2个头指针,一个是树的根节点一个是最小关键码的叶节点。

简要说下类似于数据结构中简单实现的HASH表(散列表)一样,当我们在mysql中用哈希索引时主要就是通过Hash算法(常见的Hash算法有直接定址法、平方取中法、折叠法、除数取余法、随机数法),将数据库字段数据转换成定长的Hash值与这条数据的行指针一并存入Hash表的对应位置;如果发生Hash碰撞(两个同关键字的Hash值相同),则在对应Hash鍵下以链表形式存储当然这只是简略模拟图。

索引虽好但也是无限制的使用,最好符合一下几个原则

  • 较频繁作为查询条件的字段才去創建索引
  • 更新频繁字段适合创建索引
  • 若是能有效区分数据的列适合做索引列(如性别男女未知,最多也就三种区分度实在太低)
  • 尽量的扩展索引,要新建索引比如表中已经有a的索引,现在要加(a,b)的索引那么只需要修改原来的索引即可。
  • 定义有外键的数据列一定要建立索引
  • 对于那些查询中很少涉及的列,重复值比较多的列要建立索引
  • 对于定义为text、image和bit的数据类型的列要建立索引。

关于索引:由于索引需要額外的维护成本因为索引文件是单独存在的文件,所以当我们对数据的增加,修改,删除,都会产生额外的对索引文件的操作,这些操作需要消耗額外的IO,会降低增/改/删的执行效率。所以在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是荿正比的

  • 所以我们想要删除百万数据的时候可以先删除索引(此时大概耗时三分多钟)
  • 然后删除其中无用数据(此过程需要到两分钟)
  • 刪除完成后重新创建索引(此时数据较少了)创建索引也非常快,约十分钟左右
  • 与之前的直接删除绝对是要快速很多,更别说万一删除中断,┅切删除会回滚那更是坑了。

————END————

- 点赞(编辑易感谢您的支持)

- …- 转发(分享知识,传播快乐)- …- 关注(每天更新Java开发技术)- …

我要回帖

更多关于 敏给搏捷矢 的文章

 

随机推荐