4、MySQL数据库面试问题

1、什么是SQL

结构化查询语言 作用:用于存取数据,查询、更新和管理关系型数据库系统

2、数据库三大范式

  • 第一范式:每个列 都不可以再拆分
  • 第二范式:在第一范式的基础上,非主键完全依赖于主键,而不能依赖于主键的一部分
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键

3、MyISAM和InnoDB的区别?

  • MyISAM:拥有较高的插入,查询速度快,但不支持事务
  • InnoDB:5.5版本后MySQL的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定

4、什么是索引?

  • 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
  • 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。

5、索引有哪些优缺点?

优点

  • 可以大大加快数据的检索速度
  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

缺点

  • 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
  • 空间方面:索引需要占物理空间。

6、索引分类

  • 唯一索引:数据列不允许重复,允许为null值,一个表允许多个列创建唯一索引
  • 普通索引:基本的索引类型,没有唯一性的限制,允许为null值
  • 主键索引:数据列不允许重复,不允许为null值,一个表只能有一个主键
  • 全文索引

7、创建索引的规则

  • 最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
  • 较频繁作为查询条件的字段才去创建索引
  • 更新频繁字段不适合创建索引
  • 若是不能有效区分数据的列不适合做索引列(如性别,男女未知,最多也就三种,区分度实在太低)
  • 尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
  • 定义有外键的数据列一定要建立索引。
  • 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。
  • 对于定义为text、image和bit的数据类型的列不要建立索引。

8、SQL语句主要分为哪几类?

  • 数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER
    主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。
  • 数据查询语言DQL(Data Query Language)SELECT
    这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。
  • 数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
    主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。
  • 数据控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK

9、六种关联查询

  • 交叉连接(CROSS JOIN)
  • 内连接(INNER JOIN)
  • 外连接(LEFT JOIN/RIGHT JOIN)
  • 联合查询(UNION与UNION ALL)
  • 全连接(FULL JOIN)

10、为什么要优化?

  • 系统的吞吐量瓶颈往往出现在数据库的访问速度上
  • 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢
  • 数据是存放在磁盘上的,读写速度无法和内存相比
  • 优化原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。

11、如何进行优化?

  • 表的设计合理化(符合3NF)
  • 添加适当索引
  • SQL语句优化
  • 分表技术(水平分割分表,垂直分割分库)
  • 读写分离
  • 存储过程(模块化编程,可以提高速度)
  • 对mysql配置优化
  • 定时的去除不需要的数据,定时进行碎片整理(MyISAM)

12、读写分离?

基本原理是让主数据库处理事务性增改善操作,而从数据库处理查询操作

13、为什么要读写分离?

数据库的写操作比较耗时,而读操作很快,所以读写分离解决的是数据库的写入,影响了查询的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值