1 Star 0 Fork 31

邪恶的笨笨熊 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
MySQL面试经典100题(收藏版,附答案).md 8.72 KB
一键复制 编辑 原始数据 按行查看 历史

MySQL面试经典100题(收藏版,附答案)

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

MySQL

题1:如何通俗地理解三个范式?

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

范式化设计优缺点

优点:可以尽量得减少数据冗余,使得更新快,体积小。

缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化。

反范式化

优点:可以减少表得关联,可以更好得进行索引优化。

缺点:数据冗余以及数据异常,数据得修改需要更多的成本。

题2:存储过程有哪些优缺点?

优点:

1、存储过程是一个预编译的代码块,执行效率比较高。

2、存储过程在服务器端运行,减少客户端的压力。

3、允许模块化程序设计,只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用。

4、一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率。

5、可以一定程度上确保数据安全。

缺点:

1、调试麻烦。

2、可移植性不灵活。

3、重新编译问题。

题3:为什么索引列不能存 Null 值?

将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值的特殊性就在于参与的运算大多取值为null。

索引列存储Null值,null值实际上是不能参与进建索引的过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点上。

题4:mysql_fetch_array 和 mysql_fetch_object有什么区别?

mysql_fetch_array()–将结果行作为关联数组或来自数据库的常规数组返回。

mysql_fetch_object()–从数据库返回结果行作为对象。

题5:MySQL 中数据一日十万增量,预计三年运维如何优化?

1、设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。

2、选择合适的表字段数据类型和存储引擎,适当的添加索引。

3、mysql库主从读写分离。

4、找规律分表,减少单表中的数据量提高查询速度。

5、添加缓存机制,比如memcached,apc等。

6、不经常改动的页面,生成静态页面。

7、书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE。

题6:什么是 MVCC?有哪些优势?

MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control)

注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control

MVCC最大的优势: 读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,现阶段几乎所有的RDBMS,都支持了MVCC。

1、LBCC:Lock-Based Concurrency Control,基于锁的并发控制 2、MVCC:Multi-Version Concurrency Control

基于多版本的并发控制协议。纯粹基于锁的并发机制并发量低,MVCC是在基于锁的并发控制上的改进,主要是在读操作上提高了并发量。

题7:SQL 语句中使用 like 如何避免索引失效?

使用like模糊查询全部字段的的情况

1)当两边使用%时,结果是全表扫描,索引失效。

2)当左边使用%时,结果是全表扫描,索引失效。

3)当右边使用%时,结果是range,索引生效。

上述三种情况当使用like模糊查询所有字段,不包含在索引列中的字段时,只有%放在右边索引才会生效。

注意尽量避免SELECT *查询,而是一一罗列出所需要查询的字段,因为可能搞不好SELECT *查询多出一个字段,就导致全表扫描。

覆盖索引

如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。

只扫描索引而无需回表的优点:

1)索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。

2)因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。

3)一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用。

4)innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引

题8:MySQL 中行级锁都有哪些优缺点?

行级锁的优点

1)在许多线程请求访问不同的行时减少冲突锁。

2)事务回滚时减少改变数据。

3)可以长时间对单一的行数据加锁。

行级锁的缺点

1)比页级或表级锁定占用更多的内存。

2)当大量表中使用行级锁时,比页级锁或表级锁占用更多的内存。

3)如果需要频繁对大部分数据使用GROUP BY分组操作或者需要频繁扫描整个表时,明显比其它锁慢很多。

4)使用高级别锁时更方便的支持各种不同的类型应用程序,因为这种锁开销比行级锁要小很多。

题9:什么是存储过程?如何调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

可以用一个命令对象来调用存储过程。

题10:MVCC 并发控制中读操作分成哪两类?

1、快照读 (snapshot read):读取的是记录的可见版本 (有可能是历史版本),不用加锁(共享读锁s锁也不加,所以不会阻塞其他事务的写)。

2、当前读 (current read):读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录。

题11:超键候选键主键外键分别是什么

题12:mysql-中如何有效的删除一个大表

题13:数据库表创建都有哪些注意事项

题14:分区表都有哪些限制因素

题15:-mysql-中-binlog-有几种录入格式分别有什么区别

题16:什么是聚簇索引

题17:索引有哪几种类型

题18:如何判断-mysql-是否支持分区

题19:表分区有什么好处

题20:mysql-中-blob-和-text-有什么区别

题21:mysql-中存储日期格式时如何考虑时区转换问题

题22:视图有哪些优点

题23:mysql-中创建索引有三种方式

题24:mysql-中-union-和-union-all-有什么区别

题25:count(1)count(*)-与-count(列名)-有什么区别

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/zhuxinyu114/ebooks.git
git@gitee.com:zhuxinyu114/ebooks.git
zhuxinyu114
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891