数据库索引

1、介绍

1.1定义

索引是MySQL中能够高效获取数据的一种数据结构,类似于字典中的目录

1.2为啥要引入索引

索引的目的总的来说就是为了提高数据检索效率,如果没有索引就需要进行全表扫描

具体来说索引有以下优缺点:

优点:

  • 提高数据检索效率
  • 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗

缺点:

  • 说到底索引也是一张表,所以索引也是要占用一定的空间的
  • 虽然提高了检索效率,但是也降低了更新表的速度,更新表时不仅要更新原表的数据,还要更新索引文件的数据
  • 索引是需要根据具体场景的变化不断变化的,当数据库数据较多时需要花费大量时间建立优秀的索引

索引的使用场景:

  1. 频繁访问的列,如主键、外键
  2. 经常作为查询条件的列,如在WHERE、ORDER等语句中的列
  3. 数据量较大的列,通过索引加快检索速度

2.MySQL索引的具体分类

索引大致分为以下5类:

  1. 普通索引key
  2. 唯一索引unique key
  3. 主键索引primary key
  4. 组合索引 index(name,age,gender)
  5. 全文索引

5种索引5种索引关键字

CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
  PRIMARY KEY(id),
  KEY (customer_name),
  UNIQUE (customer_no),
  KEY (customer_s1,customer_s2)
);

这里的id就是主键索引,customer_name就是普通索引,customer_name就是唯一索引,customer_s1,customer_s2就是组合索引

注意:在任何数据库当中,主键上都会自动添加索引对象。另外在MySQL中,一个字段上如果有unique约束的话,也会自动创建按索引对象。

create table fulltext_test (
    id int(11) NOT NULL AUTO_INCREMENT,
    content text NOT NULL,
    tag varchar(255),
    PRIMARY KEY (id),
    FULLTEXT KEY content_tag_fulltext(content,tag)  // 创建联合全文索引列
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

全文索引由FULL TEXT定义的索引,只能创建在char、TEXT或者varchar字段上,现在只有MyISAM存储引擎支持全文索引

3.MySQL的索引实现原理(B+树与B树的区别)

MySQL 中的索引是通过 B+ 树实现的。B+树是⼀种多路搜索树,是对B树的⼀种改进。

B树和B+树的主要区别在于 :

  • B+树内节点不存储数据,所有数据存储在叶节点导致查询时间复杂度固定为log n,而B树查询时间复杂度不固定,与Key在树中的位置有关。
  • B+树叶节点都连接成 了⼀个有序的链表,因此可以很⽅便地进⾏范围查询等操作
  • B+树更适合外部存储(存储磁盘数据)。由于内节点无data域,每个节点能索引的范围更大更精确
  • B+树的索引结构相对简单,易于实现和维护,能够满⾜⾼并发、⾼可⽤的数据库要求

你可能感兴趣的:(数据库)