Mysql面试题


Mysql中char和varchar有什么区别?

Mysql中的char是不可变的字符串,不管用多少长度都只会创建对应的空间

缺点:浪费空间

优点:存储性能高

varchar是可变的字符串,数据字符占用多少空间就使用多少空间

缺点:存储性能低

优点:节省空间


Mysql中float和double的区别是什么?

在内存中占有的字节数不同,单精度内存占4个字节,双精度占有8个字节

有效数字位数不同,单精度小数点有效位数为7位,双精度有效位数为16位


Mysql中date和datetime类型的区别?

Mysql中date中只会存储年月日

datetime会存储年月日时分秒


Mysql中sql语句执⾏的顺序?(查询语句)

Mysql中sql语句的执行顺序是

from

on

join

where

group by

having

select

order by

limit


说一下Mysql常用的存储引擎?

mysql中的执行引擎我所知道的有三个

InnoDB引擎是我们所开发所需要的数据库,这个数据库支持事务,外键,行锁

会生成两个文件,一个是frm文件存储表结构,一个是idb文件,存储数据和索引

MyISAM引擎不支持事务,外键,行锁

会生成三个文件,一个是frm文件存储表结构,一个是myd是存储数据,一个是myi存储索引

Memory是存储在内存中的,临时表

只会生成一个文件,位frm文件


说一下MySQL数据库事务的三个安全性问题?

Mysql中的三个安全性问题是

(1)脏读:读到了其他事务未提交的数据

(2)不可重复读:两次读到的数据不一致

一个事务读取到了另外一个事务update的数据

(3)幻读:两个读到的行数不一致

一个事务读取到了另外一个事务insert的数据


说一下MySQL数据库事务的隔离级别?

事务的四种隔离级别

读未提交 没有解决脏读,不可重复读,幻读

读已提交 解决了脏读,没有解决不可重复读,幻读

可重复读 解决了脏读,不可重复读,没有解决幻读

串行化 解决了上面的所有问题


谈谈对Mysql存储过程的认识?

事先编译存储在数据库的一段sql语句的集合,类似与java的方法,可以把一些耗时的操作编写到存储过程中,然后使用java程序调用,减少数据在数据库和应用服务器之前的传输,提高效率




开发中用的什么数据库,group by 和order by 都是啥意思?

开发中我们使用mysql数据库,group by是分组的意思

order by是排序的意思


Inner join、left join和right join 的区别?(高频)

inner join 是内连接,将两张表根据条件连接到一起,只展示有关联条件的数据

left join 是左外连接,展示左边的数据和有关联条件的数据

right join是右外连接,展示右边的数据和有关联条件的数据


a、b两表字段相同,写一条sql将a表数据拷贝到b表中?

INSERT INTO 目标表 SELECT * FROM 来源表;


Mysql数据库的三大范式是什么?

1nf

2nf

3nf


Mysql中如何获取当前数据库版本?

使用select version查看版本信息

进入mysql的bin目录 mysql --version|-V


Mysql如何实现分页?

mysql实现分页使用limit 第几页 每页条数

第几页 = (当前页-1) * 每页条数


Mysql中如何给字段创建索引?

mysql创建索引

create index 索引名字 on 表名字(字段名字)


Mysql中创建索引越多越好吗?为什么?

索引不是越多越好

(1)因为索引如果多的话是需要进行维护的

(2)会降低DML语句的查询效率


说一说你们公司数据库都是如何优化的?

数据库进行优化

(1)读写分离,主从复制

(2)尽量不使用select * 避免回表

(3)给经常查询的字段添加索引

(4)不使用like语句,like语句会导致索引失效,失效的场景是前面加上%

(5)使用缓存优化查询数据库

(6)使用limit

(7)水平分表,垂直分表

(8)组合索引要符合最左前缀法则


mysql体系架构

mysql的体系架构

(1)连接层,这个层是负责客户端的连接

(2)服务层,这个层负责SQL接口(DQL,DML)

(3)存储引擎,选择引擎,INNODB,MyISAM,Memory

(4)存储层,日志文件,数据文件


Mysql数据库如何实现主从复制?如果主库出现问题了,从库怎么办?

(1)Mysql实现主从复制:

主服务器中,有Binlog文件,在进行增删改操作的时候,binlog文件就修改了,将修改的binlog文件的内容发送给从服务器

从节点接收到要修改的内容之后,将要修改的内容写到从节点的relaylog文件中

从节点的sql线程读取relaylog文件,执行增删改操作,保证一致性

(2)主库出现问题,从库怎么办?

半同步复制,从库写入日志,给主库返回ack,有至少一个从库返回ack就认为操作完成

全同步复制,从库写入日志,给主库返回ack,全部的从库返回ack就认为操作完成


Mysql中常用的几种约束?

mysql中知道的约束,约束就是确保表数据的完整性,对列做出限制

主键约束

外键约束

唯一约束

非空约束


请介绍下你所知道的二叉树

简单的二查树 就是度为2的树,有两个节点,左节点和右节点

二叉搜索树 就是左节点小于根节点,右节点大于根节点

平衡二查搜索树(1)AVL树,是左右字数相差高度不超过2

(2)红黑树的五个特点 1.节点不是红的就是黑的

2.根节点是黑的

3.两个相连的节点不能是红色的红色节点的子节点一定是黑色的

4.从任意节点到叶子节点的,黑色节点的个数是一样

5.外部节点是黑色的


请简单介绍下B数

B树 多路平衡搜索树,如果介为m

一个节点可以存储多个数据 [m/2]-1~m-1

一个节点可以有多个子数 [m/2]~m (向上取整)

在B树种有介的概念,介就是这个B树的最多字数


请简单介绍下B+树

B+树是基于B树的

所有的数据都会存储叶子

叶子会形成一个单向链表

非叶子只是用来索引


请简单介绍下索引

创建索引可以提高查询效率,避免进行全表扫描

Mysql使用的引擎是Innodb,使用的是B+树来创建索引

优点: 提高效率

缺点:降低了DML语句的效率

索引占用空间


Mysql的索引类型

mysql有5中索引类型

主键索引

唯一索引

普通索引

组合索引

全文索引

在mysql中也可以将所有分为两大类(1)聚簇索引,就是将索引和行数据存储到一起,在叶子节点中存储了行数据,里面有主键索引(2)二级索引,就是将索引和主键数据存储到一起,在叶节点中存储所有和主键

通过上面我们就可以引出来覆盖索引,就是避免回表,在查询数据的时候如果使用的是二级索引,查询的字段在二级索引中没有,就会在根据主键索引进行查找数据,就会回表,我们可以创建组合索引,就可以避免回表,创建的这个组合索引也就是覆盖索引


什么是最左前缀法则?

在组合索引中,要想命中这个组合索引,就必须在查询条件中使用组合索引中最左边的字段来查询


索引的失效场景?

(1)在搜索条件的字段中使用计算,比如where age/10 = 3;就会导致索引失效

(2)使用了like语句,在前面加%也会导致索引失效

(3)在使用or的时候,左右两边要都使用索引,如果左边有索引,右边没有索引,索引就会失效

(4)在条件中,如果查询的字段是字符串类型,没有加引号,也会导致索引失效


什么是前缀索引?

字段类型为text类型的时候,如果要创建索引,可以取前面一部分来创建索引,大大降低索引的大小

create index 索引名字 on 表(字段(前几个字符))


那些表和字段适合创建索引?

(1)大表适合创建索引,数据量大的表

(2)提高查询的效率,降低增删改的效率,所以对要经常增删改的表尽量不加索引,经常作为查询条件,排序,分组的字段建立索引

(3)对于区分度高的字段,建议创建唯一索引

(4)对于大文本的字段,建议创建前缀索引

(5)尽量使用联合索引,减少单列索引,联合索引很多就可以覆盖索引,可以避免回表

(6)组合索引要符合最左前缀法则


sql优化

(1)查询优化,加索引,将那些表和字段适合创建什么索引将一将,参考上一个答案

(2)主键优化,使用相对有序的id作为主键,推荐使用雪花算法

(3)插入优化,手动开启事务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值