MySQL索引基础知识

2023-05-26 0 563

在InnoDB中,索引类别有四种,一般索引、惟一索引(换行符索引是特定的惟一索引)、全文索引。

B树在枝结点和枝叶结点储存数组、统计数据门牌号、结点提及 ,锯齿数(路子)总有一天比URL班莱班县1。比如说他们画的这棵树,每一结点储存三个URL,那么就会有四个操作符对准四个子结点。

    MySQL中的B+Tree有三个特征:1、它的URL的数目是跟路子成正比的;

2、B+Tree的根结点和枝结Behren都不会储存统计数据,只有枝叶结点才储存统计数据。

   3、B+Tree的每一枝叶结点增加了三个对准交界处枝叶结点的操作符,它的最后三个统计数据会对准下三个枝叶结点的第二个统计数据,逐步形成了三个科学规范二叉树的内部结构。

1)它是BTree的变型,BTree能化解的难题,它都能化解。BTree化解的三大难题(每一结点储存更少URL;路子更少)

2)扫库、扫表潜能大列佩季哈区(假如他们要对表进行全表扫描器,只须要结点枝叶结点就能了,不须要结点野草B+Tree领到大部份的统计数据)

3)B+Tree的硬盘理解力相对于BTree而言大列佩季哈区(根结点和枝结点不留存统计数据区,因此三个结点能留存更少的URL,一次硬盘读取的URL更少)

4)次序潜能大列佩季哈区(因为枝叶结点上有下三个统计数据区的操作符,统计数据逐步形成了链表)

5)工作效率更为平衡B+Tree总有一天是在枝叶结点领到统计数据,因此IO单次是平衡的)

建立索引,索引形式有三种。

HASH:以KV的形式索引统计数据,换句话说,它会依照索引表头聚合基元码和操作符,操作符对准统计数据。

第一个,它的时间维数是O(1),查阅速率比较快。但是基元索引里头的统计数据不是按顺序储存的,因此不能用作次序。

第二个,他们在查阅统计数据的这时候要依照数组排序基元码,因此它根本无法全力支持下同查阅(=IN),不全力支持覆盖范围查询(><>=<=between and)

  第二:假如表头多次重复值许多的这时候,会出现大量的基元冲突(采用拉链法化解),工作效率会降低。

在MyISAM里头,辅助索引也在这个.MYI文件里头。

辅助索引跟换行符索引储存

innodb

就是索引数组的逻辑顺序跟表统计数据行的物理储存顺序是一致的。(比如说字典的目录是按拼音次序的,内容也是按拼音次序的,按拼音次序的这种目录就叫聚集索引)。

InnoDB组织统计数据的形式就是(聚集)索引组织表(clusteredi ndex organize table)。假如说一张表建立了换行符索引,那么这个换行符索引就是聚集索引,决定统计数据行的物理储存顺序。

innoDB中,换行符索引和辅助索引是有三个主次之分的。刚才他们讲了,假如有换行符索引,那么换行符索引就是聚集索引。其他的索引统一叫做“二级索引”或者辅助索引。(二级索引索引统计数据的流程是这样的:当他们用name索引查阅一条记录,它会在二级索引的枝叶结点找到name=qingshan,领到主数组,也就是id=1,然后再到换行符索引的枝叶结点领到统计数据。)

假如一张表没有换行符怎么办?

1、假如他们定义了换行符(PRIMARYKEY),那么InnoDB会选择换行符作为聚集索引。

2、假如没有显式定义换行符,则InnoDB会选择第二个不包含有NULL值的惟一索引作为换行符索引。

3、假如也没有这样的惟一索引,则InnoDB会选择内置6字节长的ROWID作为隐藏的聚集索引,它会随着行记录的写入而换行符递增。

在什么表头上索引?

1、在用作where判断order次序和join的(on)表头上建立索引

 2、索引的个数不要过多。——浪费空间,更新变慢。

3、区分度低的表头,例如性别,不要建索引。——离散度太低,导致扫描器行数过多。

4、频繁更新的值,不要作为换行符或者索引。——页分裂

5、随机无序的值,不建议作为换行符索引,例如身份证、UUID。——无序,分裂

6、建立复合索引,而不是修改单列索引

什么这时候索引失效?

1、索引列上使用函数(replace\SUBSTR\CONCAT\sum count avg)、表达式排序(+-*/)

2、字符串不加引号,出现隐式转换

3、like条件中前面带%

4、负向查阅 NOTLIKE不能:!=(<>)和NOT IN在某些情况下能:

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务