数据库索引的概念和分类

什么是数据库索引?

我们再平时的开发中免不了用到数据库的索引,接下来就简单说一下数据库索引。

数据库索引用来干什么?

数据库索引就是为了提高数据的查询速率。

数据库索引有哪些?

  1. 聚集索引:在数据库中,所有行数都会按照主键索引排序。
  2. 非聚集索引:就是给普通字段加上索引。
  3. 联合索引:好几个字段组成的索引称为联合索引。

索引的底层是?

数据库索引的底层是B+树。
B+树的中间元素不储存数据,只储存索引,数据存储在B+树的叶子节点处,一个节点可以存放多个数据,查找一个节点的时候可以有多个元素,大大提升查找效率,这就是为什么数据库索引用的就是B+树,因为索引很大,不可能都放在内存中,所以通常是以索引文件的形式放在磁盘上,所以当查找数据的时候就会有磁盘I/O的消耗,而B+树正可以解决这种问题,减少与磁盘的交互,因为进行一次I/O操作可以得到很多数据,增大查找数据的命中率。

索引在磁盘上的存储是怎样的?

索引在磁盘上聚集存储和非聚集存储的方式是不同的。

  1. 聚集索引在磁盘中的存储: 聚集索引叶子结点存储是表里面的所有行数据; 每个数据页在不同的磁盘上面
  2. 非聚集索引在磁盘上的存储:叶子结点存储的是聚集索引键,而不存储表里面所有的行数据,所以在查找的时候,只能查找到聚集索引键,再通过聚集索引去表里面查找到数据

索引的分类

数据库索引分为:

  1. 主键索引(PRIMAY KEY)
  2. 唯一索引(UNIQUE)
  3. 常规索引(INDEX)
  4. 全文索引(FULLTEXT)

1. 主键索引(PRIMAY KEY)

某一个属性组能唯一标识一条记录
例如:员工表(员工编号,姓名,性别,部门等等),员工编号唯一标识,可以作为主键。
主键索引是最常见的索引类型,它能确保数据记录的唯一性,确定特定数据记录在数据库中的位置。
实例:

CREATE TABLE `employee`(、
  `EmployeeID` INT(11)  AUTO_INCREMENT PRIMARY KEY,
  #或 PRIMARY KEY(`GradeID`)

唯一索引(UNIQUE)

避免同一个表中某数据列中的值重复。
与主键索引的区别:主键索引只能有一个,唯一索引可有多个。
实例:

CREATE TABLE `dept`(、

  `DeptID` INT(11)  AUTO_INCREMENT PRIMARY KEY,

  `DeptName` VARCHAR(32) NOT NULL UNIQUE

  #或 UNIQUE KEY ` GradeID`(`GradeID`)

常规索引(INDEX)

快速定位特定数据
index 和 key 关键字都可以设置常规索引,应加在查询条件的字段,不易添加太多常规索引,影响数据的插入,删除和修改操作。

实例:

创建表时添加

CREATE TABLE `result`{
  //...
  INDEX / KEY `ind` (`studentNo`,`subjectNo`)
}

创建后追加

ALTER TABLE `result` ADD  INDEX `ind` 
(`studentNo`,`subjectNo`);

全文索引(FULLTEXT)

快速定位特定数据
只能用于MyISAM类型的数据表;只能用于CHAR ,VARCHAR,TEXT数据列类型;使用大型数据集。

CREATE TABLE `student`(
  #...
    FULLTEXT(`StudentName`)
)ENDINE=MYISAM;
ALTER TABLE employee ADD FULLTEXT(`first_name`)

你可能感兴趣的:(面试,数据库,Sql)