MySql数据库学习(三)索引

一、索引的种类

mysql索引主要分为两大类:单列索引、组合索引
单列索引: 一个索引只包含一个列,一个表可以有多个单列索引。
其中单列索引又可以分为:主键索引、唯一索引、普通索引
普通索引: 最基本的索引,值可以不唯一,允许有空值。
唯一索引: 唯一所以要求所有列的值是唯一的,允许有空值。
主键索引: 所有列的值是唯一的,不允许有空值。
组合索引: 一个索引可以包含两个或者两个以上的列。

二、索引的实现原理

索引的底层使用的是B+树的数据结构;
为何不用其他数据结构?
1、使用二叉树,如果使用自增索引,会导致二叉树不平衡,从而使数据结构类似于链表,每次查找数据都要全盘扫描,使效率降低;
2、使用红黑树(即二叉平衡树),会导致树的高度特别高,查询效率也会降低;
3、B+树是B树的升级版,使树的高度变低;
B树: 把节点搂到内存里,然后挨个节点比对;先从跟节点开始,例如 查找49,15-56之间中间有指针,然后向下寻找;
在这里插入图片描述
B+树: 与B树的不同的是,只有子节点有date(索引文件行所在磁盘指针),且子节点包含所有数据,每个子节点之间有双向的指针(图片画的单向的)。
在这里插入图片描述

  • 聚集索引底层数据结构:
    子节点存储了完整的数据结构;
    在这里插入图片描述

使用整型比较大小比较快,所以推荐使用整型;整型存储空间小;

  • 非聚集索引底层数据结构:
    子节点只存储指针,指向索引的行;
    在这里插入图片描述
三、创建索引注意事项

1、最好使用联合索引;
2、如果创建表的时候不创建索引,DB会自动找一个自增不重复的字段当索引;
3、索引最好是自增的整型
4、索引并不是越多越好,索引会提高数据访问速度,但增加了删除、插入、更新的时间
5、索引创建时,应该考虑经常作为查询条件或者要求排序的字段作为索引。
6、经常出现在关键字order by、group by、distinct后面的字段,建立索引;
7、在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构;

四、如何创建索引

普通索引创建格式:

CREATE INDEX IndexName ON `TableName`(`字段名`(length)) 或者 ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))

例如:

  CREATE INDEX account_Index ON `pay_accounting`(`account`);
ALTER TABLE pay_accounting ADD INDEX account_Index(`account`)

主键索引:

CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

唯一索引:

CREATE UNIQUE INDEX IndexName ON `TableName`(`字段名`(length)); 

或者 ALTER TABLE TableName ADD UNIQUE (column_list)
例如:

CREATE UNIQUE INDEX account_UNIQUE_Index ON `pay_accounting`(`account`);

组合索引:

CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);

例如:

扫描二维码关注公众号,回复: 11574670 查看本文章
 CREATE INDEX nickname_account_createdTime_Index ON `award`(`nickname`, `account`, `created_time`);

猜你喜欢

转载自blog.csdn.net/weixin_40966030/article/details/107466574