MySQL,Redis,MongoDB,ElasticSearch面试题总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL,Redis,MongoDB,ElasticSearch面试题总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含11420字,纯文字阅读大概需要17分钟。
内容图文
![MySQL,Redis,MongoDB,ElasticSearch面试题总结](/upload/InfoBanner/zyjiaocheng/863/ccac4c838ea14f89b77467c65dea1635.jpg)
目录
2.简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?
3.MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
9.MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
10.简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?
12.聊聊你理解的索引,索引是不是越多越好?创建索引的原则是什么?
MySQL
1、MySQL 中有哪几种锁?
答:1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
2.简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?
答:MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件; 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDb: 支持 ACID 的事务 ,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发;不存储总行数3.MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
答:SQL 标准定义的四个隔离级别为:1、read uncommited :读到未提交数据,最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
2、read committed:脏读,不可重复读,允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
3、repeatable read:可重读,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
4、serializable :串行事物,最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读0
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)
4.什么是脏读,缓读,不可重复读?
答: 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。
不可重复读的重点是修改 : 同样的条件 , 你读取过的数据 , 再次读取出来发现值不一样了
幻读的重点:在于新增或者删除同样的条件 , 第 1 次和第 2 次读出来的记录数不一样
5.谈一谈MySQL的优化?
答:大体可以分为三部分:索引的优化,sql语句的优化,表的优化。在高并发网络环境下,除了优化数据库外,还会涉及到分布式缓存,CDN,数据库读写分离等高并发优化技术。
索引优化原则:
- 只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引
- 尽量使用短索引,如果可以,应该制定一个前缀长度
- 对于经常在where子句使用的列,最好设置索引,这样会加快查找速度
- 对于有多个列where或者order by子句的,应该建立复合索引
- 对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引
- 尽量不要在列上进行运算(函数操作和表达式操作)
- 尽量不要使用not in和<>操作
sql语句的优化:
- 查询时,能不要*就不用*,尽量写全字段名
- 大部分情况连接效率远大于子查询
- 多使用explain和profile分析查询语句
- 查看慢查询日志,找出执行时间长的sql语句优化
- 多表连接时,尽量小表驱动大表,即小表 join 大表
- 在千万级分页时使用limit
- 对于经常使用的查询,可以开启缓存
数据库表优化:
- 表的字段尽可能用NOT NULL
- 字段长度固定的表查询会更快
- 把数据库的大表按时间或一些标志分成小表
- 将表拆分
数据表拆分:主要就是垂直拆分和水平拆分。
水平切分:将记录散列到不同的表中,各表的结构完全相同,每次从分表中查询, 提高效率。
垂直切分:将表中大字段单独拆分到另外一张表, 形成一对一的关系。
6.什么是内联接、左外联接、右外联接?
答:内联接(Inner Join):匹配2张表中相关联的记录。
左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。查询关联和左表全部
? ? ? ? ?右外联接( Right Outer Join ):除了匹配 2 张表中 相关联的记录外,还会匹配右表中剩余的记录 ,左表中未匹配到的字段用 NULL 表示。 查询关联和右表全部7.如何通俗地理解三个范式?
答:第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解; 第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF):
第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。 第二范式要求每个表只描述一件事情。
第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。 除了主键订单编号外,顾客姓名依赖于非主键顾客编号。
8.什么是基本表?什么是视图?试述视图的优点?
?答:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。 视图本身不独立存储在数据库中,是一个虚表 。 ? ? ? 优点:?? (1) 视图能够简化用户的操作? ? ? ? ? ?(2) 视图使用户能以多种角度看待同一数据; ? ? ? ? ? ? ? ? ? ?(3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供安全保护9.MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
答: 1、设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
? ? ? ? ? 2 、选择合适的表字段数据类型和存储引擎,适当的添加索引。 ? ? ? ? ? 3 、 MySQL 库主从读写分离 。 ? ? ? ? ? 4 、找规律分表,减少单表中的数据量提高查询速度。 ? ? ? ? ? 5 、添加缓存机制,比如 memcached , apc 等。 ? ? ? ? ? 6 、 不经常改动的页面,生成静态页面。 ? ? ? ? ? 7 、书写高效率的 SQL 。比如 SELECT * FROM TABEL 改为 SELECT fifield_1,fifield_2, fifield_3 FROM TABLE.10.简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?
答:索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用
关键字 UNIQUE 把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像 INDEX(columnA, columnB)索引,这就是联合索引。
? ? ? ? ?索引可以极大的提高数据的查询速度,但是 会降低插入、删除、更新表的速度 ,因为在执行这些写操作时,还要操作索引文件11.简单聊聊你所认知的分库分表?
答: 分表,能够解决单表数据量过大带来的查询效率下降的问题;
分库,面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,此时都没有意义。此时,则需要通过数据分库策略,提高数据库并发访问能力。
优点,分库、分表技术优化了数据存储方式,有效减小数据库服务器的负担、缩短查询响应时间
12.聊聊你理解的索引,索引是不是越多越好?创建索引的原则是什么?
? ? 答:索引( Index )是 帮助 MySQL 高效获取数据的数据结构 。 常见的查询算法 , 顺序查找 , 二分查找 , 二叉排序树查找 , 哈希散列法 , 分块查找 , 平衡多路搜索树 B 树( B-tree ) ,索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于快速获取信息。你也可以这样理解: 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能 迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 mysql 有4种不同的索引: 主键索引(PRIMARY )? ? 唯一索引(UNIQUE )? 普通索引(INDEX )? 全文索引(FULLTEXT ) 索引并非是越多越好,创建索引也需要耗费资源,一是增加了数据库的存储空间,二是在插入和删除时要花费较多的时间维护索引 ? ? ? ? ? ? ?1. 索引加快数据库的检索速度 ? ? ? ? ? ? ?2.索引降低了插入、删除、修改等维护任务的速度 ? ? ? ? ? ? ?3.唯一索引可以确保每一行数据的唯一性 ? ? ? ? ? ? ?4. 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能 ? ? ? ? ? ? ?5.索引需要占物理和数据空间 常见索引原则有: ? ? ? ? ? ? 1. 选择唯一性 索引,唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。 ? ? ? ? ? ? 2. 为 经常需要排序、分组和联合操作的字段 建立索引。 ? ? ? ? ? ? 3. 为 常用作为查询条件的字段 建立索引。 ? ? ? ? ? ? 4. 限制索引的数目 :? 越多的索引,会使更新表变得很浪费时间。尽量使用数据量少的索引 ? ? ? ? ? ? 5. 如果索引的值很长,那么查询的速度会受到影响。尽量使用前缀来索引 ? ? ? ? ? ? 6. 如果索引字段的值很长,最好 使用值的前缀来索引 。 ? ? ? ? ? ? 7. 删除不再使用或者很少使用的索引 ? ? ? ? ? ? 8. 最左前缀匹配原则,非常重要的原则。 ? ? ? ? ? ? 9. 尽量选择区分度高的列作为索引区分度的公式是表示字段不重复的比例 ? ? ? ? ? ?10. 索引列不能参与计算,保持列 “ 干净 ” : 带函数的查询不参与索引。 ? ? ? ? ? ?11. 尽量的扩展索引,不要新建索引13.数据库的事务?
答:事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作, 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 。 事务是一个不可分割的工作逻辑单元事务必须具备以下四个属性,简称 ACID 属性:
1、原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2、一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性。
3、隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4、持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成。否则的话就会造成我们虽然看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。这是不允许的。
14.LIKE 声明中的%和_是什么意思?
答:%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。
未完稍等~
? ?
内容总结
以上是互联网集市为您收集整理的MySQL,Redis,MongoDB,ElasticSearch面试题总结全部内容,希望文章能够帮你解决MySQL,Redis,MongoDB,ElasticSearch面试题总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。