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

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

作者: alcohol和cat | 来源:发表于2019-08-01 21:31 被阅读0次

mysql方面常见真题

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 , 单独的⼀⾏记录加锁,对指定的记录进⾏加锁,这样其它进程还是可以对同⼀个表中的其它记录进⾏操作。表级锁速度快,但冲突多,⾏级冲突少,但速度慢。

存储引擎

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

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面试真题

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/sckhdctx.html