静态网站建设背景,为什么要注册中文域名,网站搭建实训总结,做影视网站风险大吗1.索引的介绍
MySQL 索引#xff1a;是帮助 MySQL 高效获取数据的一种数据结构。所以#xff0c;索引的本质就是数据结构#xff01;在表数据之外#xff0c;数据库系统还维护着满足特定查找算法的数据结构#xff0c;这些数据结构以某种方式指向数据#xff0c; 这样就…1.索引的介绍
MySQL 索引是帮助 MySQL 高效获取数据的一种数据结构。所以索引的本质就是数据结构在表数据之外数据库系统还维护着满足特定查找算法的数据结构这些数据结构以某种方式指向数据 这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。有索引和无索引的情况比较作用提高查询效率
2.索引的分类
1按照功能分类
普通索引最基本的索引没有任何限制。
唯一索引索引列的值必须唯一但允许有空值。如果是组合索引则列值组合必须唯一。
主键索引一种特殊的唯一索引不允许有空值。在建表时有主键列同时创建主键索引。
联合索引顾名思义就是将单列索引进行组合。
外键索引只有 InnoDB 引擎支持外键索引用来保证数据的一致性、完整性和实现级联操作。
全文索引快速匹配全部文档的方式。InnoDB 引擎 5.6 版本后才支持全文索引。MEMORY 引擎不支持。
2按照结构分类
BTree 索引MySQL 使用最频繁的一个索引数据结构是 InnoDB 和 MyISAM 存储引擎默认的索引类型
底层基于 BTree 数据结构。
Hash 索引MySQL 中 Memory 存储引擎默认支持的索引类型。
3.索引的创建/查看/删除
1主键和外键的创建本质就是索引的创建会产生对应的索引
查询student表中的索引 (主键列自带主键索引) 查询db4数据库中的product表 (外键列自带外键索引)
2创建索引
-- 1. 创建索引的语法:
CREATE [UNIQUE][FULLTEXT] INDEX 索引名称 [USING 索引类型] ON 表名称(列名称....);-- 2. 案例代码:
-- 为 student 表当中的 name 列创建一个普通的索引。
CREATE INDEX idx_name ON student(name);
-- 为 student 表当中的 age 列创建一个唯一索引。
CREATE UNIQUE INDEX idx_age ON student(age);
3查看索引
-- 1. 查看索引的语法:
SHOW INDEX FROM 表名称;-- 2. 案例代码: 查询学生表当中,拥有的索引
SHOW INDEX FROM student;4添加索引
-- 1. 普通索引
ALTER TABLE 表名称 ADD INDEX 索引名称 (列名);
-- 2. 组合索引
ALTER TABLE 表名称 ADD INDEX 索引名称 (列名1,列名2,列名3....);
-- 3. 主键索引
ALTER TABLE 表名称 ADD PRIMARY KEY (主键列名称);
-- 4. 外键索引
ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (本表外键列名) REFERENCES 主表名称(主键列名);
-- 5. 唯一索引
ALTER TABLE 表名称 ADD UNIQUE 索引名称(列名);
-- 6. 全文索引
ALTER TABLE 表名称 ADD FULLTEXT 索引名称(列名);5删除索引
-- 1. 基础语法
DROP INDEX 索引名称 ON 表名称;6索引的使用
索引创建成功后再次查询带有索引的列则它的效率会提高【查询时间变短】
4.索引的原理[面试]
原理 磁盘存储 BTree
1磁盘存储特点
系统从磁盘读取数据到内存时是以磁盘块block为基本单位的。位于同一个磁盘块中的数据会被一次性读取出来而不是需要什么取什么。InnoDB 存储引擎中有页Page的概念页是其磁盘管理的最小单位。InnoDB 存储引擎中默认每个页的大小为 16KB。InnoDB 引擎将若干个地址连接磁盘块以此来达到页的大小 16KB在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置这将会减少磁盘 I/O 次数提高查询效率。
2BTree数据结构 特点每个节点中不仅包含 key 值还有数据。会增加查询数据时磁盘的 IO 次数 3BTree数据结构 特点非叶子节点只存储 key 值所有数据存储在叶子节点所有叶子节点之间都有连接指针 好处提高查询速度减少磁盘的 IO 次数树型结构较小 4原理总结
BTree树的所有的节点都保存地址和数据在检索/查询的过程中会读取到各个节点上的数据从而产生了很多不必要的IO操作。BTree树的非叶子节点只存储地址不存储数据所有的数据都保存在叶子节点上在检索/查询的过程中对于非叶子节点不会读取数据减少了IO操作所以能提高查询效率。
5.创建索引的原则
对查询频次较高并且数据量比较大的表建立索引。使用唯一索引区分度越高使用索引的效率越高。索引字段的选择最佳候选列应当从 WHERE 子句的条件当中提取如果 WHERE 子句当中的条件组合比较多那么应当挑选最常用的、过滤效果最好的列组合索引虽然可以有效的提升查询数据的效率但是并不是多多益善。