Mysql的索引

6. 了解过Mysql的索引嘛 ?

MYSQL索引主要有 : 单列索引 , 组合索引空间索引 , 用的比较多的就是单列索引和组合索引 , 空间索引我这边没有用到过

单列索引 : 在MYSQL数据库表的某一列上面创建的索引叫单列索引 , 单列索引又分为

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值

  • 主键索引:是一种特殊的唯一索引,不允许有空值

  • 全文索引: 只有在MyISAM引擎、InnoDB(5.6以后)上才能使⽤用,而且只能在CHAR,VARCHAR,TEXT类型字段上使⽤用全⽂文索引。

组合索引 : 在MYSQL数据库表的多个字段组合上创建的索引 , 称为组合索引也叫联合索引

  • 组合索引的使用,需要遵循左前缀原则

  • 一般情况下,建议使用组合索引代替单列索引(主键索引除外)

创建索引语法 :

1). 创建索引

复制代码
 CREATE  [ UNIQUE | FULLTEXT ]  INDEX  index_name  ON  table_name  ( index_col_name,... ) ;

2). 查看索引

复制代码
 SHOW  INDEX  FROM  table_name ;

3). 删除索引

复制代码
 DROP  INDEX  index_name  ON  table_name ;

7. 索引的底层数据结构了解过嘛 ?

索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

MyISAM和InnoDB存储引擎:只⽀支持B+ TREE索引, 也就是说默认使用BTREE,不能够更换

MEMORY/HEAP存储引擎:支持HASH和BTREE索引

8. MYSQL支持的存储引擎有哪些, 有什么区别 ?

MYSQL存储引擎有很多, 常用的就二种 : MyISAMInnerDB , 者两种存储引擎的区别 ;

  • MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储

  • MyISAM 不支持事务 , InnerDB支持事务

  • MyISAM 不支持外键 , InnerDB支持外键

9. 什么是聚簇索引什么是非聚簇索引 ?

聚簇索引

在使用InnoDB存储引擎的时候, 主键索引B+树叶子节点会存储数据行记录,简单来说数据和索引在一起存储 , 这就是聚簇索引

非聚簇索引

在使用MyISAM存储引擎的时候, B+树叶子节点只会存储数据行的指针,简单来说数据和索引不在一起 , 这就是非聚簇索引

10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?

需要查询二次

如果使用MyISAM存储引擎 , 会首先根据索引查询到数据行指针, 再根据指针获取数据

如果是InnoDB存储引擎 , 会根据索引查找指定数据关联的主键ID , 再根据主键ID去主键索引中查找数据

11. 知道什么是回表查询嘛 ?

当我们为一张表的name字段建立了索引 , 执行如下查询语句 :

select name,age from user where name='Alice'

那么获取到数据的过程为 :

  1. 根据name='Alice'查找索引树 , 定位到匹配数据的主键值为id=18

  2. 根据id=18到主索引获取数据记录 (回表查询)

先定位主键值,再定位行记录就是所谓的回表查询,它的性能较扫一遍索引树低

12. 知道什么叫覆盖索引嘛 ?

覆盖索引是指只需要在一棵索引树上就能获取SQL所需的所有列数据 , 因为无需回表查询效率更高

实现覆盖索引的常见方法是:将被查询的字段,建立到联合索引里去。

执行如下查询语句 : select name,age from user where name='Alice'

因为要查询 nameage二个字段 , 那么我们可以建立组合索引

复制代码
 create index index_name_age on user(name,age) 

那么索引存储结构如下 :

这种情况下, 执行select name,age from user where name='Alice' , 会先根据name='Alice', 找到记录 , 这条记录的索引上刚好又包含了 age 数据 , 直接把 Alice 77数据返回 , 就不会执行回表查询 , 这就是覆盖索引

相关推荐
_院长大人_15 分钟前
MyBatis Plus 分批查询优化实战:优雅地解决 IN 参数过多问题(实操)
java·mybatis
雨中飘荡的记忆17 分钟前
SpringAI_Redis向量库实战
数据库·redis·缓存
姓蔡小朋友23 分钟前
Redis网络I/O模型
网络·数据库·redis
C雨后彩虹1 小时前
机器人活动区域
java·数据结构·算法·华为·面试
用户21411832636021 小时前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
数据库学啊1 小时前
专业的国产时序数据库哪个好
数据库·时序数据库
a3158238061 小时前
Android Framework开发知识点整理
android·java·linux·服务器·framework·android源码开发
爱吃面条的猿1 小时前
MySQL 随机日期/时间生成
数据库·mysql
2501_939909052 小时前
Mysql 主从复制、读写分离
数据库·mysql