索引
索引
数据库中的索引与书籍中的目录类似,在一本书中,利用目录可以快速查找所需信息,无需阅读整本书。在数据库中,索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据。
书中的目录是一个词语列表,其中注明了包含各个词的页码。
在数据库中,由于数据存储在数据表中,因此索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构B-树或哈希表中,通过MySQL可以快速有效地查找与键值相关联的字段,根据索引的存储类型,可以将索引分为B-树(BRTREE)和哈希索引(HASH)。InnoDB和MyISaM存储引擎支持B-树索引。
索引的作用是通过使用索引,大大提高数据库的检索速度,改善数据库性能。
索引分类
在一个表中,主键索引只能有一个,唯一索引可以有多个
-
主键索引(PRIMARY KEY)
在数据库中为表定义主键时自动创建主键索引,是唯一索引的特殊类型
-
唯一索引(UNIQUE KEY)
唯一索引不允许有两行具有相同的索引值
创建了唯一索引的列允许有空值
-
常规索引(KEY/INDEX)
默认的
-
全文索引(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 ('张')
有索引和无索引的区别
索引在小数据量的时候,区别不大,在大数据量的时候,十分明显