索引是一种特殊的文件,包含着对数据表中所有记录的引用指针。(书的目录,快速寻找相应内容)
可以对表中的一列或多列创建索引,并指定索引类型。
(所学索引基于mysql5.5之后的数据引擎InnoDB)
一、mysql常见的两种数据引擎:
5.5版本之后InnoDB和5.5版本之前的MyISAM
区别:
(1)InnoDB支持事务(保持数据的稳定性),稳定性比MyISAM好,MyISAM不支持事务
(2)MyISAM性能比较高,比InnoDB高
二、存储数据模组:
1.磁盘:容量大、价格便宜、操作速度慢、可持久化(电脑重启数据还存在)
2.内存:容量小、价格比较贵、操作速度快、不可持久化
3.CPU缓存:容量小、操作速度极快、不可以持久化
索引中数据存储在磁盘中,存储的是数据的位置
查询数据的存储目录:
show variables like ‘%dir%’;
1.索引避免了顺序查询,提高查询速率
2.使用索引可以将数据库中的关键索引信息存储到内存中,内存的操作速度比磁盘快
一张表可以有多个索引,每个索引就是一个目录。
三、索引的优缺点和使用场景1.优点
可以提高查询效率
2.缺点
(1)维护成本高,因为索引使用B+树,每次新增、删除数据都需要整理树结构
(2)增加存储成本(磁盘、内存)
(3)索引过多会对MYSQL的优化器(选择合适索引)造成一定负担
3.使用场景
(1)数据量大
(2)经常查询的列
4.不适用场景
(1)数据使用频率低,而且添加和删除比较高频的业务
(2)电脑本身磁盘和内存空间不足
5.索引使用注意事项
对已经存在的很多数据的表新增索引的时候,不能在生产环境上执行(找一个没有用户使用的时间段)。
1.按照是否为主键
(1)主键索引(聚簇索引)
(2)非主键索引(非聚簇索引/二级索引)
2.按照特征
(1)普通索引
(2)唯一索引(创建索引的字段具有唯一性)
(3)联合索引(由一个表中的多个字段组成的索引)
1.主键索引、唯一索引在创建表时,创建了主键约束或者唯一约束时会自动创建主键索引和唯一索引
2.查看索引:show index from table_name;
3.手动创建索引
普通索引:create index 索引名 on 表名(字段名)
联合索引:create index 索引名 on 表名(字段名,字段名)
唯一索引:create unique index 索引名 on 表名(字段名)
或create unique index 索引名 on 表名(字段名,字段名)
主键索引:alter table 表名 add primary key(字段名)
注意:
索引和约束联系和区别
1.创建索引时会自动创建约束,在创建约束时也会自动创建索引
2.索引和约束是不同的业务,约束是用来规定数据的正确性,索引是用来提升数据库的程序性
drop index 索引名 on 表名;
(每个索引名在一张表中是唯一的,不能重复)
注意事项:
(1)创建索引会创建对应约束,删除索引会删除对应约束
(2)唯一索引创建前提:原先的数据具有唯一性



