2020-04-08---MYSQL面试题大全

1. 什么是索引?

索引是一种数据结构,可以帮助我们快速进行数据的查找;

2. 索引是个什么样的数据结构呢?

索引的数据结构和具体的存储引擎的实现有关,在mysql中常用索引有hash索引和B+树索引,innoDB中默认使用B+树索引;

3. 在建立索引的时候,都有哪些需要考虑的因素呢?

 1.字段使用频率;

2.如果是联合索引,需要按照索引时的字段顺序使用,否则无法命中索引;

3.过多的索引反而会影响数据库的查询效率

4.ACID是什么?可以详细说一下吗?

 A:Atomicity原子性,不可分割

 C:Consistency 一致性,

 I:Isolation 隔离性;

 D:Durability 持久性;

5.为什么要尽量设定一个主键?主键使用自增ID还是UUID?

主键可以保证整张表的唯一性,主键也可以快速定位行数据;

推荐自增ID,因为在默认的InnoDB中,主键索引是作为聚簇索引存在的.自增索引可以保证数据的顺序.

6.字段为什么要求定义为not null?

null值会占用更多的空间维护,所以如果可以的话定义一张表的时候尽量减少允许非空列的存在;

7.MySQL中的varchar和char有什么区别?

char是定长的字符串,空间占用是固定的而var是变长字符串,存储时如果没有指定长度会默认采用最大长度存储,

从检索效率上讲char的效率也更高;

8.varchar(10)和int(10)代表什么含义?

varchar仅代表申请的长度空间,也就是最大存储数据的长度.

9.三个范式

第一范式: 每个列都不可以再拆分.

第二范式: 每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来

第三范式: 非主键列只依赖于主键,不依赖于其他非主键.数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系

10.对慢查询都怎么优化过?

sql优化:

尽量使用索引查询,少用!=或者in这样的操作符会导致全表扫描;

表数据尽量不要使用null;

尽量少用字符串的模糊通配符%查询;

尽量指定查询的结果字段,而不是用*;

分批处理大批量的数据查询;

条件语句exists效率更高;

select into少用;

另外如果表中数据量过大,可以考虑横向分表或者纵向分表;

11、与Oracle相比,Mysql有什么优势?

1.Mysql是开源软件,随时可用,无需付费。

2.Mysql是便携式的

3.带有命令提示符的GUI。

4.使用Mysql查询浏览器支持管理

12、如何区分FLOAT和DOUBLE?

以下是FLOAT和DOUBLE的区别:

浮点数以8位精度存储在FLOAT中,并且有四个字节。

浮点数存储在DOUBLE中,精度为18位,有八个字节。

13、MYSQL数据表在什么情况下容易损坏?

服务器突然断电导致数据文件损坏。

强制关机,没有先关闭mysql 服务等。

14.什么是存储过程?有哪些优缺点?

存储过程是一些预编译的SQL语句。

优点:

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

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

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

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

可以一定程度上确保数据安全,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

缺点:

可移植性不灵活(因为存储过程依赖于具体的数据库)

不便于调试。

没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。

无法适应数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。

15.说一说drop、delete与truncate的区别?

drop直接删掉表有关的一切(数据/结构/约束...),不会记录日志,为DDL(Data Definition Language,数据库定义语言)操作。

truncate 删除表中所有数据(再插入时自增长id又从1开始),该操作也不会记录日志所以比较快,为DDL操作。只能删table。

DELETE语句执行删除的过程是每次从表中删除一行,需要记录日志,比较慢,可以加where 语句,为DML(Data Manipulation Language, 数据操纵语言)。可以删table 和view 。

速度上drop > truncate > delete

16.什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具有和物理表相同的功能,没有物理存储。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

使用场景:

只希望用户查看特定信息的列

来源于多个表,可以创建视图提取我们需要的信息,简化操作。

17.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 主键,外键,超键,候选键 数据库事务的四个特征及含义 视图的作用,可以更改吗 视图是虚拟的表;只包含动态检索数据的...
    DamaoShao阅读 11,366评论 0 3
  • 数据库常见面试题(开发者篇) 什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程...
    Java3y阅读 10,224评论 4 144
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 8,227评论 0 8
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 4,839评论 0 6
  • 1、列举常见的关系型数据库和非关系型都有那些? 关系型数据库:Oracle、DB2、Microsoft SQL S...
    SlashBoyMr_wang阅读 11,869评论 0 5

友情链接更多精彩内容