CCh99

索引

索引

数据库中的索引与书籍中的目录类似,在一本书中,利用目录可以快速查找所需信息,无需阅读整本书。在数据库中,索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据。

书中的目录是一个词语列表,其中注明了包含各个词的页码。

在数据库中,由于数据存储在数据表中,因此索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构B-树或哈希表中,通过MySQL可以快速有效地查找与键值相关联的字段,根据索引的存储类型,可以将索引分为B-树(BRTREE)和哈希索引(HASH)。InnoDB和MyISaM存储引擎支持B-树索引。

索引的作用是通过使用索引,大大提高数据库的检索速度,改善数据库性能。

索引分类

在一个表中,主键索引只能有一个,唯一索引可以有多个

  1. 主键索引(PRIMARY KEY)

    在数据库中为表定义主键时自动创建主键索引,是唯一索引的特殊类型

  2. 唯一索引(UNIQUE KEY)

    唯一索引不允许有两行具有相同的索引值

    创建了唯一索引的列允许有空值

  3. 常规索引(KEY/INDEX)

    默认的

  4. 全文索引(FULL INDEX)

    在特定的数据库引擎下才有,MyISAM有

    快速定位数据

索引的使用

--显示所有的索引信息
SHOW INDEX FROM student
--显示创建表的语句
SHOW CREATE TABLE student

-- 主键索引studentno、唯一索引indetitycard、常规索引email
TABLE	CREATE TABLE
student	CREATE TABLE `student` (
  `studentno` INT(4) NOT NULL COMMENT '学号',
  `loginpwd` VARCHAR(20) DEFAULT NULL,
  `studentname` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
  `sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',
  `gradeid` INT(11) DEFAULT NULL COMMENT '年级编号',
  `phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空',
  `address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空',
  `borndate` DATETIME DEFAULT NULL COMMENT '出生时间',
  `email` VARCHAR(50) NOT NULL COMMENT '邮箱账号允许为空',
  `identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`studentno`),
  UNIQUE KEY `identitycard` (`identitycard`),
  KEY `email` (`email`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8
--添加索引
--添加全文索引: 索引名(索引字段)
ALTER TABLE school.student ADD FULLTEXT INDEX `studentname`(`studentname`); 

--create index 索引名 on 表(字段)
CREATE INDEX index_address ON student(address)

--EXPLAIN 分析sql的执行状况
EXPLAIN SELECT * FROM student

EXPLAIN SELECT * FROM student WHERE MATCH(studentname) AGAINST ('张')

有索引和无索引的区别

索引在小数据量的时候,区别不大,在大数据量的时候,十分明显

mysql索引底层原理

posted on 2021-03-14 22:53  CCh99  阅读(78)  评论(0编辑  收藏  举报

导航