首页 > 数据库 >最全MySQL面试20题和答案(一)

最全MySQL面试20题和答案(一)

时间:2024-08-06 21:30:53浏览次数:5  
标签:20 最全 查询 索引 MySQL 权限 数据 数据库

数据库基础知识

  1. 为什么要使用数据库?

    • 数据保存在内存
      • 优点:存取速度快
      • 缺点:数据不能永久保存
    • 数据保存在文件
      • 优点:数据永久保存
      • 缺点:
        1. 速度比内存操作慢,频繁的IO操作。
        2. 查询数据不方便
    • 数据保存在数据库
      1. 数据永久保存
      2. 使用SQL语句,查询方便效率高。
      3. 管理数据方便
  2. 什么是SQL?

    • 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
    • 作用:用于存取数据、查询、更新和管理关系数据库系统。
  3. 什么是MySQL?

    • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。
  4. 数据库三大范式是什么?

    • 第一范式:每个列都不可以再拆分。
    • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
    • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
    • 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。
  5. MySQL有关权限的表都有哪几个?

    • MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。
      • 下面分别介绍一下这些表的结构和内容:
        • user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
        • db权限表:记录各个帐号在各个数据库上的操作权限。
        • table_priv权限表:记录数据表级的操作权限。
        • columns_priv权限表:记录数据列级的操作权限。
        • host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
  6. MySQL的binlog有有几种录入格式?分别有什么区别?

    • 有三种格式,statement,row和mixed。
      • statement模式下,每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。
      • row级别下,不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如alter table),因此这种模式的文件保存的信息太多,日志量太大。
      • mixed,一种折中的方案,普通操作使用statement记录,当无法使用statement的时候使用row。此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。

引擎

  1. MySQL存储引擎?

    • 常用的存储引擎有以下:
      • Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
      • MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
      • MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。
  2. MyISAM与InnoDB区别

    • MyISAM与InnoDB区别
  3. InnoDB引擎的4大特性

    • 插入缓冲(insert buffer)
    • 二次写(double write)
    • 自适应哈希索引(ahi)
    • 预读(read ahead)
  4. 存储引擎选择

    • 如果没有特别的需求,使用默认的Innodb即可。
    • MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
    • Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。

索引

  1. 什么是索引?

    • 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
    • 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
    • 更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。
  2. 索引有哪些优缺点?

    • 索引的优点
      • 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
      • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
    • 索引的缺点
      • 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
      • 空间方面:索引需要占物理空间。
  3. 索引有哪几种类型?

    • 主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键。
    • 唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
      • 可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引
      • 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索
    • 普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
      • 可以通过 ALTER TABLE table_name ADD INDEX index_name (column); 创建普通索引
      • 可以通过 ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3); 创建组合索引
    • 全文索引: 是目前搜索引擎使用的一种关键技术。
      • 可以通过 ALTER TABLE table_name ADD FULLTEXT (column); 创建全文索引
  4. 索引的数据结构(B树,hash)

    • 索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
  5. 索引算法有哪些?

    • 索引算法有BTree算法和Hash算法
      • BTree算法:BTree是最常用的mysql数据库索引算法,也是mysql默认的算法。它不仅可以用于=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量。
      • Hash算法:Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。
  6. 索引设计的原则?

    • 适合索引的列是出现在where子句中的列,或者连接子句中指定的列。
    • 基数较小的列,索引效果较差,没有必要在此列建立索引。
    • 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间。
    • 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。
  7. 创建索引的原则

    • 索引虽好,但也不是无限制的使用,最好符合以下几个原则:
      1. 最左前缀匹配原则,组合索引非常重要的原则,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的顺序可以任意调整。
      2. 较频繁作为查询条件的字段才去创建索引。
      3. 更新频繁字段不适合创建索引。
      4. 若是不能有效区分数据的列不适合做索引列(如性别,男女未知,最多也就三种,区分度实在太低)。
      5. 尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
      6. 定义有外键的数据列一定要建立索引。
      7. 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。
      8. 对于定义为text、image和bit的数据类型的列不要建立索引。
  8. 创建索引的三种方式,删除索引

    • 创建索引的三种方式,删除索引
  9. 创建索引时需要注意什么?

    • 非空字段:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值;
    • 取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度高;
    • 索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高。
  10. 使用索引查询一定能提高查询的性能吗?为什么?

    • 通常,通过索引查询数据比全表扫描要快。但是我们也必须注意到它的代价。
    • 索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改。这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O。
    • 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
      • 基于一个范围的检索,一般查询返回结果集小于表中记录数的30%
      • 基于非唯一性索引的检索

好了,今天先分享20题,之后的部分会在后面几期分享出来,大家在面试之前可以多看看这部分的内容,万一面试官考到,你答对了,你就比别人更有优势,一起加油吧!!!

标签:20,最全,查询,索引,MySQL,权限,数据,数据库
From: https://www.cnblogs.com/cjybigdatablog/p/18346007

相关文章

  • 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满
    在链表中,每个节点都有一个指向下一个节点的指针。删除一个节点的本质是将前一个节点的指针指向要删除节点的下一个节点,从而跳过要删除的节点。以下是详细解释为什么以及如何这样做:1.**链表的结构**:  一个链表节点包含两个部分:存储的数据和指向下一个节点的指针。  ``......
  • CF1920D题解
    题面这里不再赘述了,直接搬个链接。InLuoguInCodeforces思路存储一共两种操作:要么在末尾加一个数xxx,要么把整一段复制......
  • P3200 [HNOI2009] 有趣的数列
    哇,太恶心了思路首先我们将题意简化,简化后为对于任意一个偶数位所填数必然大于等于自己的下标,那么考虑填数,如果填的偶数比奇数多,那么此时要么填尽偶数后失败,或者下一个位置填奇数就炸,比如偶数刚好多一个,那么必然有一个偶数放在了奇数位,那么本来下一个要填的偶数往前移了一个,导致......
  • 【MySQL】索引和事务
    秋招秋招中最经典,最高频的面试题文章目录索引index操作索引的SQL查看索引创建索引删除索引事务操作四个核心特性索引index在数据库中建立一个特殊的“目录“(一系列特定的数据结构),为了加快查询速度select查询都是遍历查询,比较复杂O(N)级别复杂度嵌......
  • DFJX[2024] 游记
    ·谨以此记,记录我们共同热爱的OI!洛谷食用博客食用这七天没什么事的话都会更新的(8.4-8.11)Day0集训,因为在自己学校,总有种开学的感觉也是提前住上九年级的新宿舍楼了,喜提一床+班长下午到学校,食堂没给我们准备饭QwQ现做的饭,挺好吃的,还得是我们大df晚上有个模拟比赛,5道......
  • Mysql事务四大特性的介绍
    1数据库事务        数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并......
  • MySQL中DayofWeek与Weekday的区别
    DAYOFWEEK(date):(1-7,周日始,美国人)这个函数返回日期date是一周中的哪一天,范围是1到7。其中,1表示周日,2表示周一,依此类推,7表示周六。这符合美国的日期习惯,即周日是一周的第一天。例如,DAYOFWEEK('2023-03-01')如果这一天是周三,将返回3。WEEKDAY(date):(0-6,周一始)WEEKDAY(......
  • 2024牛客暑期多校训练营7
    Preface久违地打的像人的一场,在开局即红温的条件下后面还能放好心态打还是很不容易的前期我被I单防红温了,还好有祁神救场上去帮我过了这个题,然后徐神秒出D的做法扔给我我爬上去实现了下很快过了由于想不出C这个神秘构造的做法,只能经典地让我中期占机子写大模拟H,想我这种......
  • [WACV2022]Addressing out-of-distribution label noise in webly-labelled data
    该论文考虑了一个现实的场景:数据集来自网络爬虫,即存在开集噪声OOD样本和闭集噪声ID样本。作者提出了一个简单但有效的策略:通过新设计的指标区分OOD样本,并对OOD样本软化(soften)弥补与干净样本的差距,该方法称为:DynamicSofteningofOut-of-distributionSamples(DSOS)。真实世界噪......
  • 20240802每人近可能看懂AI新闻无图版备份
    20240802每人近可能看懂AI新闻无图版备份大家好,现在4-5级号,因为粉丝数不够1000粉丝关注,链接真的不太好发,群里找会做本地AI包集成的和开源素材,欢迎加Q群389908620,每天有几十人看,麻烦点赞关注转发,3连1下好吗-靠这个挣点一周一杯咖啡钱,每天更新需要3个小时,很费时,至少叫这里关注者到1......