IT修炼手册之SQL索引

索引基础概念介绍:

索引(index)翻译为一个目录,用于快速定位我们想要找的数据的位置。例如:我们把一个数据库比作一本书,而索引(index)就是书中的目录,此刻要找到书的某个感兴趣的内容,我们一般是不会整本书翻完再去确认该内容在哪里,而是通过书的目录,定位到该内容章节所在页数,最后直接翻到该页面

数据库中的索引

全表扫描 VS 索引扫描:
(1)、以一本书为例,全表扫描就是如果我们查找某个内容的时候,那么通读一遍新华字典,然后找到我们想要找到的字.

(2)、而跟全表扫描相对应的就是索引查找,索引查找就是在表的索引部分找到我们想要找的数据具体位置,然后会到表里面将我们想要找的数据全部查出

索引的主要作用:
(1)、用来解决查询速度比较慢的问题的。通过索引可以提高查询速度。他的作用和更改数据没有任何关系
(2)、是对字段来加的,不是对表
(3)、索引字段的数据变化时(新增、更新、删除)B 树的结构可能会发生变化。
我们对索引字段的 insert/update/delete 操作时效率上与没有索引的情况比较会比较低
(4)、索引会使你的表的大小变大,因为要存储索引结构.

索引实现原理:
B树(Mysql采用B+Tree的形式进行实现):
B-tree又叫平衡多路查找树。一棵m阶的B-tree (m叉树)的特性如下:
(其中ceil(x)是一个取上限的函数)

1) 树中每个结点至多有m个孩子;

2) 除根结点和叶子结点外,其它每个结点至少有有ceil(m / 2)个孩子;

3) 若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点);

4) 所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息(可以看做是外部结点或查询失败的结点,实际上这些结点不存在,指向这些结点的指针都为null);

5) 每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,……,Kn,Pn)。其中:

a) Ki (i=1…n)为关键字,且关键字按顺序排序K(i-1)< Ki。

b) Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)。

c) 关键字的个数n必须满足: ceil(m / 2)-1 <= n <= m-1。

B-tree中的每个结点根据实际情况可以包含大量的关键字信息和分支(当然是不能超过磁盘块的大小,根据磁盘驱动(disk drives)的不同,一般块的大小在1k~4k左右);这样树的深度降低了,这就意味着查找一个元素只要很少结点从外存磁盘中读入内存,很快访问到要查找的数据。
这里写图片描述

索引类型
(1)主键索引
其实就是主键,我们对表的字段指定好主键之后,自动的会给我们创建一个主键索引
(2)普通索引
就是我们指定一个字段,让这个字段成为索引字段。
(3)唯一索引
1、你这个列一定是全局唯一的,不能重复
2、字段可以为 NULL,并且可以有多个 NULL 数据,但是如果有内容必须满足第一个约束
3、主键索引只能是主键才可以成为主键索引,唯一索引普通字段也可以成为唯一索引, 只要是满足上面的条件就可以
组合索引(复合索引)
1、多个字段可以组成一个索引
2、这种索引结构主要是用在 where 后面条件比较多的情况

(4)覆盖索引
不是索引类型,是 SQL 写法,让你的 SQL 尽量用覆盖索引,也就是说我们的 SQL 查询的字段尽量要用索引字段
对于 Select 来讲的。select 字段 1,字段 2,字段 3 from table where ===

字段 1,字段 2,字段 3 最好是索引字段
如果是主键索引的话,在叶子节点上存储的是具体的数据行。

如果索引字段不是主键索引,那么叶子节点上存储的不是数据行。存储的是主键值。 那么他拿到主键值之后再去找数据行。我们把这个操作称之为回行操作

如果我们操作不当,即使你创建了索引,在查询的时候也不会被用到,进而你的 SQL 效率同样会很低。 操作不当具体是指我们的 where 写的不恰当,会导致索引时效
重点内容
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断。(指代覆盖索引的情况)
索引列上少计算,范围之后全时效。
LIKE 百分写最右,覆盖索引不写星。
不等空值还有 or ,索引失效要少用。
var 引号不可丢, SQL 高级也不难

如下图示供参考:

这里写图片描述

文件数据
innoDB
.frm 表结构
.idb 表数据 和 索引数据的
.opt 字符集 排序的规则
myisam
.frm 表结构
.MYD 表数据
.MYI 表索引的
索引的优点
1、提高查询速度
2、提高排序速度
缺点:
1、占用空间 10M=》20M
2、增加、更新、删除操作比较慢
以上内容仅供学习参考如有补充欢迎留言

猜你喜欢

转载自blog.csdn.net/qq_37779333/article/details/81501313