Mysql索引面试题

1.索引

1.1 索引原理

        索引(Index)是帮助MySQL高效获取数据的数据结构。用来快速寻找具有特定值,索引的底层使用B+树来实现。未创建索引时,执行MySQL查询时,会从第一个记录开始扫描整个表的所有记录,直到查找到符合要求的记录,表中的记录越多,查询的代价就越大。但是作为搜索条件的列上创建了索引,可迅速得到目标记录所在的位置;大大提高了海量数据的检索速度。

索引虽然能提高查询速度,但同时也有其他影响:

1.1.1 索引带来的影响:

占用磁盘空间

当对表中的数据进行增删改的操作时,除了要维护数据表,还有维护二叉树,对速度会有一定的影响。

创建一个索引并不能解决所有的查询问题,需要分别给字段建立索引,创建索引和维护索引都需要耗费时间,耗费的时间会随着数据量的增加而增加。

索引是以空间来换时间。

不合理的使用索引反而会造成负担。

1.2 常见索引

主键索引(primary key)

唯一索引(unique)

普通索引(index)

全文索引(fullText)

1.2.1 索引的几种类型或分类

物理结构上可以分为聚集索引和非聚集索引两类:

聚簇索引指索引的键值的逻辑顺序与表中相应行的物理顺序一致,即每张表只能有一个聚簇索引,也就是我们常说的主键索引;

非聚簇索引的逻辑顺序则与数据行的物理顺序不一致。

应用上可以划分为几类:

主键索引:特殊的唯一索引,也成聚簇索引,不允许有空值,并由数据库帮我们自动创建;

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

普通索引:MySQL 中的基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了提高查询效率。

组合索引:组合表中多个字段创建的索引,遵守最左前缀匹配规则;

全文索引:只有在 MyISAM 引擎上才能使用,同时只支持 CHAR、VARCHAR、TEXT 类型字段上使用。

1.3 索引操作

1.3.1创建主键索引

第一种方式:

在创建表的时候,直接在字段名后指定primary key:

create table user1(id int primary key,name varchar(30));

第二种方式:

在创建表的最后,指定某列或者某几列为主键索引:

create table user2(id int ,name varchar(30),primary key(id));

第三种方式:

创建表后再添加主键索引:

create table user3(id int,name varchar(30));

alter table user3 add primary key(id);

主键索引的特点:

一个表中,最多有一个主键索引(可以使用复合主键)

主键索引的效率最高(主键不可重复)

创建主键索引的列,它的值不能为NULL,且不能重复(非空,唯一)

主键索引的列基本上是int类型

1.3.2创建唯一索引

唯一索引的字段为 unique,创建方式与主键索引一致,也有三种方法来创建。

唯一索引的特点:
当谈到MySQL索引面试题时,有几个常见的题和概念,我会尽力回答。请记住,以下答案仅供参考。 1. 什么是索引索引是一种数据结构,用于提高数据库查询的速度。它可以让数据库系统更快地定位到所需数据,而不必扫描整个表。 2. MySQL中常见的索引类型有哪些? MySQL常见的索引类型包括主键索引(Primary Key Index)、唯一索引(Unique Index)、普通索引(Index)和全文索引(Full-Text Index)等。 3. 主键索引和唯一索引有何区别? 主键索引是用于唯一标识每一行数据的索引,它必须是唯一且非空的。而唯一索引允许数据列中的值有重复,但是索引列的值必须是唯一的。 4. 什么时候应该使用索引? 当查询的频率高、需要快速定位到特定数据行或避免全表扫描时,使用索引可以提高查询性能。然而,过多或不恰当的索引可能会降低性能。 5. 索引对数据库性能的影响是什么? 索引可以加快查询速度,但同时会导致插入、更新和删除操作变慢,因为每次修改数据时都需要更新索引。过多的索引也会占用磁盘空间。 6. 如何优化索引性能? 可以通过以下方式进行索引性能优化: - 选择合适的索引类型; - 选择适当的索引列; - 避免过多或重复的索引; - 使用覆盖索引减少IO操作; - 定期维护索引,删除不必要的索引。 这些只是一些常见的MySQL索引面试题,希望能对你有所帮助。如果你有其他题,请随时提
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发小牛牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值