MySQL面试(记录学习笔记)

MySQL面试(记录学习笔记)


1.MySQL常用存储引擎以及MyISAM与InnoDB区别
常用的存储引擎有以下三种:
InnoDB:InnoDB引擎提供了对数据库ACID事务的支持,并且还提供了行级锁和外检的约束。它的设计目的就是处理大数据容量的数据库系统。
MyIASM引擎:不提供事事务的支持,也不支持行级锁和外键。
MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。
2.MyISAM索引与InnoDB索引的区别
InnoDB索引是聚簇索引,MyISAM索引是费聚簇索引;InnoDB的主键索引的叶子结点存储着行数据,因此主键索引非常高效;MyISAM索引的叶子节点存储的是行数据地址,需要在寻址一次才能得到数据;InnoDB非主键索引的叶子结点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
3.InnoDB引擎的4大特性
插入缓存;二次写;自适应哈希索引;预读。
4.存储引擎选择
如果没有特别的需求,使用InnoDB即可。
如果以读写插入为主的应用程序,比如博客系统,新闻门户网站,可以使用MyISAM;更新删除操作频率较高,或者要保证数据的完整性,并发量高,支持事务和外键,比如OA自动化办公系统,可以使用InnoDB。
5.什么是索引?
索引是一种特殊的文件(在InnoDB数据库表上索引是表空间的一个组成部分),它们包含着对数据库表里所有记录的引用指针。索引是一种数据结构,数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据。索引的实现通常使用B树以及B+Tree树。索引就相当于目录,为了方便查找书中内容,通过对内容简历索引形成目录。索引是一个文件,它是要占物理空间的。
6.索引有哪些优缺点?
优点:可以大大加快数据的检索速度,这也是创建索引的主要原因;通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统性能。
缺点:创建索引和维护索引要消耗时间,当对表中的数据进行增加,删除和修改的时候,索引页要动态的维护,会降低增删改的执行 效率;索引需要物理内存。
7.索引的使用场景
创建索引的SQL语句:

alert table 表名 add index(字段名)

where:
order by :当我们使用order by将查询结果按照某个字段排序时,如果该字段没有建立索引,那么执行计划会将查询出的所有数据使用外部排序,这个操作是很影响性能的,因为需要将查询涉及到的所有数据从磁盘中读取到内存,读到内存之后还有排序,会使性能下降。但是,如果我们对该字段建立索引,那么由于索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取数据即可。如果分页的,那么只用取出索引表某个范围内的索引对应的数据,而不是取出所有数据进行排序再返回某个范围内的数据。
join:对join语句匹配关系 on 涉及的字段建立索引能够提高效率。
覆盖索引:如果要查询的字段都建立了索引,那么引擎会直接在索引表中查询而不会访问原始数据,这就叫索引覆盖。因此,我们需要尽可能在select后面只写必要的查询字段,以增加索引覆盖的几率。这里值得注意的是不要想着为每个字段建立索引,因为优先使用索引的优势就是在于体积小。
8.索引有哪几种类型?
主键索引:数据列不允许重复,不允许为null,一个表只能有一个主键。
唯一索引:数据列不允许重复,允许为null,一个表允许多个列创建唯一索引。可以通过alter table table_name add unique (column);创建唯一索引;可以通过 alter table table_name add unique (column1,,column2);创建唯一组合索引。
普通索引:基本的索引类型,没有唯一性的限制,允许为null值。可以通过alert table table_name add index index_name (column);创建普通索引。可以通过alter table table_name add index index_name(column1,column2,column3);创建组合索引。
全文索引:是目前搜索引擎使用的一种关键技术。
可以通过alter table table_name add fulltext (column);创建全文索引。
9.索引的基本原理
索引用来快速的寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。索引的原理很简单,就是把无序的查询变成有序的查询。把创建了索引的列的内容进行排序;对排序结果生成倒排表;在倒排表内容上拼上数据地址链;在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体的数据。
10.索引的数据结构
索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+Tree树索引。InnoDB存储引擎默认索引实现为B+Tree树。对于Hash索引来说,底层的数据结构就是Hash表。
11.创建索引的原则
1.最左前缀匹配原则,组合索引非常重要的原则,MySQL会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配,比如a=1 and b=2 and c>3 and d=4,如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2.比较频繁作为查询条件的字段才去创建索引。
3.跟新频繁字段不适合创建索引
4.若是不能有效区分数据的列不适合做索引列,如性别,男女未知,区分度太低,不适合做索引列。
5.尽量拓展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
6.定义有外键的数据列一定要建立索引。
7.对于那些查询中很少涉及的列,重复值较多的列不要建立索引。
8.对于定义维text,image和bit的数据类型不要建立索引。
12.创建索引的三种方式
第一种方式:在执行create table时创建索引

CREATE TABLE user_index2 (
	id INT auto_increment PRIMARY KEY,
	first_name VARCHAR (16),
	last_name VARCHAR (16),
	id_card VARCHAR (18),
	information text,
	KEY name (first_name, last_name),
	FULLTEXT KEY (information),
	UNIQUE KEY (id_card)
);

第二种方式:使用alter table命令去增加索引

ALTER TABLE table_name ADD INDEX index_name (column_list);

alter table用来创建普通索引,unique索引或者primary key索引。
第三种方式:使用create index命令创建

CREATE INDEX index_name ON table_name (column_list);

create index可对表增加普通索引或unique索引,但是,不能创建primary key索引。
13.删除索引
根据索引名删除普通索引,唯一索引,全文索引:
alert table 表名 drop key 索引名
删除主键索引:alert table 表名 drop primary key。这里需要注意,如果主键自增长,那么不能直接执行此操作,自增长依赖于主键索引,需要先取消自增长再删除。但是通常不会删除主键,因为设计主键一定与业务逻辑有关。
14.B树和B+Tree树的区别
在B树中,你可以将键和值存放在内部节点和叶子结点;但是在B+Tree树中,内部节点都是键,没有值,叶子节点同时存放键和值。B+Tree树的叶子节点有一条链相连,而B树的叶子结点各自独立。
15.使用B树的好处
B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率。这种特性使得B树在特定数据重复多次查询的场景中更加高效。
16.使用B+Tree数的好处
由于B+Tree树的内部结点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快的缩小查找范围。B+Tree树的叶子结点由一条链相连,因此,当需要进行一次全数据遍历的时候,B+Tree树只需要是O(logN)时间找到最小的一个节点,然后通过链进行O(N)的顺序遍历即可,而B树则需要对树的每一层进行遍历,这会需要更多的内存置换次数,因此也就需要花费更多的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值