MYSQL索引学习 一 ---- 索引简介

文章目录:

什么是索引

在数据之外,数据库还维护着满足特定查找的数据结构,这些数据结构以某种特定方式指向数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构就是索引。因此MySQL官方对索引的定义为索引 (Index) 是帮助MySQL高效获取数据的数据结构

从官方定义中我们可以看出:

  • 索引的本质为:索引为数据结构。即排好序的快速查找数据结构。
  • 索引的目的在于提高查找效率,可以类比字典。

即索引可以帮我们快速定位到数据的位置,而不用我们一个一个的从前往后扫描查询数据。就像图书馆中的每个图书都有一个编号,我们可以根据相应编号直接去对应位置找到该书。

mysql 使用的索引结构有: BTree 索引、Hash索引、full-text全文索引、R-Tree索引, 一般情况下BTree结构最为常用。

如下面例子所示,我们建立一张表格books

在这里插入图片描述
为了加快查找,我们使用索引如下图,其中第一列Col1为id,第二列Col2为bookname,左边为数据存储的物理地址,右边为我们使用索引的数据结构。由此可得我们可以根据Col2快速的定位到数据存储的位置。

在这里插入图片描述
例如查询bookname=77的数据时:

SELECT id, bookname FROM books where bookname = 77;

索引列位于bookname,因此 mysql 会使用索引查找 bookname 为 77 的行。首先查找 root 不为77, 因此去比它大的右子树中查找。。。。。。。。。。。

索引的优势劣势

优势:

  • 类似大学图书馆书目索引,提高数据检索的效率,降低数据库的IO成本
  • 通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势:

  • 虽然索引大大提高了查询数据,同时降低了更新表的速度,如对表进行INSERT,UPDATE 和DELETE。 因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引的字段。

哪些情况下需要建立索引:

1、主键自动建立唯一索引
2、频繁作为查询条件的字段应该创建索引
3、查询中与其他表关联的字段,外键关系创建索引
4、频繁更新的字段不适合创建索引
5、Where 条件用不到的字段不创建索引
6、单键/组合索引的选择问题 (在高并发的情况下创建组合索引)
7、查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。
8、查询中统计或者分组的字段

哪些情况下不需要建立索引:

1、表记录太小
2、经常增删改的表
3、数据重复且分布平均的字段,因此应该只为经常查询和经常排序的数据列建立索引。

MYSQL 索引分类:

单值索引:一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一,但允许有空值。
复合索引:即一个索引包含多个列

基本语法:

CREATE [UNIQUE] INDEX indexname ON mytable(columnname(LENGTH));
ALTER mytable ADD [unique] INDEX [indexname] ON (columnname(LENGTH));

删除索引:

DROP INDEX [indexname] ON mytable;

查看索引:

SHOW INDEX FROM table_name;

添加数据表索引的四种方式:

添加主键,这意味着索引值必须是唯一的,且不为NULL
ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)

创建索引值必须是唯一的(除了NULL可能出现多次)
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)

添加普通索引,索引值可能出现多次
ALTER TABLE tbl_name ADD INDEX index_name(column_list)

指定索引值为FULLTEXT 用于全文索引
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)
发布了44 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42784951/article/details/100919037