BAT大厂常见面试真题及解析,80%的人容易忽略的基础

mysql方面常见真题

image

mysql有关权限的表都有哪⼏个?

Mysql服务器通过权限表来控制⽤户对数据库的访问,权限表存放在mysql数据库⾥,由

mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。

Mysql中有哪⼏种锁?

MyISAM⽀持表锁,InnoDB⽀持表锁和⾏锁,默认为⾏锁

表级锁:开销⼩,加锁快,不会出现死锁。锁定粒度⼤,发⽣锁冲突的概率最⾼,并发量最低

⾏级锁:开销⼤,加锁慢,会出现死锁。锁⼒度⼩,发⽣锁冲突的概率⼩,并发度最⾼

Mysql数据优化

1. 优化数据类型

1. 避免使⽤NULL,NULL需要特殊处理,⼤多数时候应该使⽤NOT NULL,或者使⽤⼀个

特殊的值,如0,-1作为默认值。

2. 仅可能使⽤更⼩的字段,MySQL从磁盘读取数据后是存储到内存中的,然后使⽤cpu

周期和磁盘I/O读取它,这意味着越⼩的数据类型占⽤的空间越⼩.

2. ⼩⼼字符集转换

客户端或应⽤程序使⽤的字符集可能和表本身的字符集不⼀样,这需要MySQL在运⾏过程

中隐含地进⾏转换,此外,要确定字符集如UTF-8是否⽀持多字节字符,因此它们需要更

多的存储空间。

3. 优化count(my_col)和count(*)

4. 优化⼦查询

遇到⼦查询时,MySQL查询优化引擎并不是总是最有效的,这就是为什么经常将⼦查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的⼀点是,确保连接表 (第⼆个表)的连接列是有索引的,在第⼀个表上MySQL通常会相对于第⼆个表的查询⼦集进⾏⼀次全表扫描,这是嵌套循环算法的⼀部分。

5. 优化UNION

在跨多个不同的数据库时使⽤UNION是⼀个有趣的优化⽅法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的⾏,同时也必须对数据进⾏排序,我们知道排序是⾮常耗费资源的,特别是对⼤表的排序。

UNION ALL可以⼤⼤加快速度,如果你已经知道你的数据不会包括重复⾏,或者你不在乎是否会出现重复的⾏,在这两种情况下使⽤UNION ALL更适合。此外,还可以在应⽤程序逻辑中采⽤某些⽅法避免出现重复的⾏,这样UNION ALL和UNION返回的结果都是⼀样的,但UNIONALL不会进⾏排序。

MySQL的关键字

添加索引:

alter table tableName add 索引(索引字段)

主键:primary key

唯⼀:unique

全局:fulltext

普通:index

多列:index index_name

⻚级:引擎 BDB。次锁定相邻的⼀组记录。

表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不⾏。⾏级:引擎 INNODB , 单独的⼀⾏记录加锁,对指定的记录进⾏加锁,这样其它进程还是可以对同⼀个表中的其它记录进⾏操作。表级锁速度快,但冲突多,⾏级冲突少,但速度慢。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

存储引擎

存储引擎说⽩了就是如何存储数据、如何为存储的数据建⽴索引和如何更新、查询数据等技术的实现⽅法。

**1. MyISAM:**这种引擎是mysql最早提供的。这种引擎⼜可以分为静态MyISAM、动态

MyISAM 和压缩MyISAM三种:

静态MyISAM:如果数据表中的各数据列的⻓度都是预先固定好的,服务器将⾃动选择这种表类型。

因为数据表中每⼀条记录所占⽤的空间都是⼀样的,所以这种表存取 和更新的效率⾮常⾼。当数据受损时,恢复⼯作也⽐较容易做。

动态MyISAM:如果数据表中出现varchar、text或BLOB字段时,服务器将⾃动选择这种表类型。

相对于静态MyISAM,这种表存储空间⽐较⼩,但由于每条记录的⻓度不⼀,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进⽽导致 执⾏效率下降。

同时,内存中也可能会出现很多碎⽚。因此,这种类型的表要经常⽤optimize table 命令或优化⼯具来进⾏碎⽚整理。

**压缩MyISAM:**以上说到的两种类型的表都可以⽤myisamchk⼯具压缩。

这种类型的表进⼀步减⼩了占⽤的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时⾏解压缩。但是,不管是何种MyISAM表,⽬前它都不⽀持事务,⾏级锁和外键约束的功能。

**2. MyISAM Merge引擎:**这种类型是MyISAM类型的⼀种变种。

合并表是将⼏个相同的MyISAM表合并为⼀个虚表。常应⽤于⽇志和数据仓库。

**3. InnoDB:**InnoDB表类型可以看作是对MyISAM的进⼀步更新产品,它提供了事务、⾏级

锁机制和外键约束的功能。

**4. memory(heap):**这种类型的数据表只存在于内存中。它使⽤散列索引,所以数据的存取

速度⾮常快。因为是存在于内存中,所以这种类型常应⽤于临时表中。

**5. archive:**这种类型只⽀持select 和 insert语句,⽽且不⽀持索引。

Desc[ribe] tablename; //查看数据表的结构

show engines; 命令可以显示当前数据库⽀持的存储引擎情况

"面试"就能获得一份BAT面试真题**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值