mysql基础面试100题之(41-50)

41. InnoDB引擎的4大特性,了解过吗

  • 插入缓冲(insert buffer)

  • 二次写(double write)

  • 自适应哈希索引(ahi)

  • 预读(read ahead)

42. 索引有哪些优缺点?

优点:

  • 唯一索引可以保证数据库表中每一行的数据的唯一性

  • 索引可以加快数据查询速度,减少查询时间

缺点:

  • 创建索引和维护索引要耗费时间

  • 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间

  • 以表中的数据进行增、删、改的时候,索引也要动态的维护。

43. 索引有哪几种类型?

  • 主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。

  • 唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。

  • 普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。

  • 全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。

  • 覆盖索引:查询列要被所建的索引覆盖,不必读取数据行

  • 组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并

44. 创建索引有什么原则呢?

  • 最左前缀匹配原则

  • 频繁作为查询条件的字段才去创建索引

  • 频繁更新的字段不适合创建索引

  • 索引列不能参与计算,不能有函数操作

  • 优先考虑扩展索引,而不是新建索引,避免不必要的索引

  • 在order by或者group by子句中,创建索引需要注意顺序

  • 区分度低的数据列不适合做索引列(如性别)

  • 定义有外键的数据列一定要建立索引。

  • 对于定义为text、image数据类型的列不要建立索引。

  • 删除不再使用或者很少使用的索引

45. 创建索引的三种方式

在执行CREATE TABLE时创建索引

CREATE TABLE `employee` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `sex` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用ALTER TABLE命令添加索引

ALTER TABLE table_name ADD INDEX index_name (column);

使用CREATE INDEX命令创建

CREATE INDEX index_name ON table_name (column);

46. 百万级别或以上的数据,你是如何删除的?

  • 我们想要删除百万数据的时候可以先删除索引

  • 然后批量删除其中无用数据

  • 删除完成后重新创建索引。

47. 什么是最左前缀原则?什么是最左匹配原则?

  • 最左前缀原则,就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

  • 当我们创建一个组合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。。

48. B树和B+树的区别,数据库为什么使用B+树而不是B树?

  • 在B树中,键和值即存放在内部节点又存放在叶子节点;在B+树中,内部节点只存键,叶子节点则同时存放键和值。

  • B+树的叶子节点有一条链相连,而B树的叶子节点各自独立的。

  • B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。.

  • B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。innodb中页的默认大小是16KB,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数有会再次减少,数据查询的效率也会更快.

49. 覆盖索引、回表等这些,了解过吗?

  • 覆盖索引: 查询列要被所建的索引覆盖,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

  • 回表:二级索引无法直接查询所有列的数据,所以通过二级索引查询到聚簇索引后,再查询到想要的数据,这种通过二级索引查询出来的过程,就叫做回表。

50. B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据?

  • 在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引。 在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则隐式的生成一个键来建立聚簇索引。

  • 当查询使用聚簇索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值