MySQL模块面试题

1.SQL优化

(1)避免使用*

(2)合理创建索引

(3)尽量避免where子句中对索引字段进行null值判断,否则全表扫描。

(4)尽量避免在where子句中使用or来连接条件,也会进行全表扫描。用IN替换OR

(5)like时,不以%开头,否则全表扫描

(6)尽量避免在where子句中对索引字段进行表达式操作,否则全表扫描

(7)尽量避免在where子句中对索引字段进行函数操作,否则全表扫描

(8)复合索引,要遵循最左原则(只要最左边的在where中出现即可)

(9)左右外连接要遵循小表驱动大表

(10)尽量避免使用子查询。MySql的优化器对子查询的处理能力比较弱,可以改写成Inner Join,因为 Inner Join MySQL不需要在内存中创建临时表。

(11)大分页优化:如果数据量巨大,造成分页过多,导致越往后面翻页,SQL的耗时越长。可以先使用ID>上一页的最大ID进行查询,再使用LIMIT pageSize来优化。

select * from order limit 99,980,20. – 优化前

select * from order id>99,980 limit 20 – 优化后

(12)在使用group by的时候,尽量使用where替换having,having只会在检索出所有记录之后才会对结果集进行过滤,这个处理需要排序分组,如果能通过where子句提前过滤查询的数目,就可以减少这方面的开销。

2.如何判断是否用到索引

explain分析sql语句,通过key、key_len查看是否命中索引或索引失效。

3.常见的索引有哪些

主键索引、唯一索引、普通索引、复合索引

4.最左匹配(常见)和其原理(不常见)

概念:最左匹配就是只有包含索引键左边的查询才会走联合索引。

原理:mysql会对索引进行排序,联合索引也是。比如联合索引a,b;会先对a进行排序,如果a相等,再对b进行排序,如a=1 and b=2,此时a值确定b时相对有序的,所以会用到索引。如果a出现了排序(也就是遇到了范围查询如a>1 and b=2),则无法保证b的顺序(1,3、2,1),此时a字段可以匹配上索引,剩下的字段索引就失效了。

5.EXPLAIN的作用

explain可以分析sql性能的好坏和是否用到了索引。根据type字段的值,判断性能的好坏,要求是ref级别,至少达到range级别。

6.创建索引的原则

在经常需要搜索、排序、分组或联合操作的列上创建索引。

对于具有唯一性特征的列,如学号、身份证号等,创建唯一性索引可以快速定位到特定记录。

限制索引数目:过多的索引会占用额外的磁盘空间,并可能降低更新操作的速度。

尽量使用数量少的索引:如果索引的值很长,则占用的磁盘较大,查询速度会受到影响。

更新频繁的字段不适合创建索引,会导致索引树频繁的去维护其结构,从而导致性能下降。

7.一级索引和二级索引的区别

mysql的索引时B+树结构,其中一级索引又叫聚簇索引,其中非叶子节点存储的是索引,最底层的叶子节点存储的是索引和数据。
二级索引也叫做非聚簇索引,非聚簇索引的叶子节点包含的是主键的值而不是数据记录的地址。因此,使用非主键索引查询时需要先找到主键的值,然后再通过主键的值来查询数据记录,这个动作叫做回表。

8.分页公式

1.limit分页公式
(1)limit分页公式:curPage,是当前第几页;pageSize是一页多少条记录。

limit (curPage-1*pageSize,pageSize
(2)使用方法:
select * from user limit (curPage-1*pageSize,pageSize;

2.总页数公式
(1)总页数公式:totalRecord是总记录数;pageSize是一页分多少记录

int totalPageNum = (totalRecord+pageSie-1) / pageSize;

好处:
1.减轻数据库压力
2.降低内存消耗
3.支持高并发
在开发中,我们应该充分利用分页查询,尽可能减少一次查询数据的量,以达到优化系统性能的目的。

9.索引的作用?为什么?

● 索引(index)是帮助MySQL高效获取数据的数据结构

● 提高数据检索的效率,降低数据库的I/O成本(不需要全表扫描)

●通过索引列对数据进行排序,降低数据排序的成本,降低了cpu的消耗

10.索引失效的场景

组合索引没有遵循最左匹配。

模糊查询中%在左侧。

在索引的列上使用表达式。

在索引的列上使用函数。

在查询条件中使用IS NULL或者IS NOT NULL会导致索引失效。

在查询条件中使用OR连接多个条件会导致索引失效,除非OR连接的每个条件都加上索引。

11.金额用什么数据类型

一般使用分的话,mysql使用bigint,java使用Long。

使用元可以使用decimal,java使用BigDecimal.

12.int(n)n是什么

n只是显示宽度, 不表示存储数字长度的上限。

13.什么是回表

通过二级索引找到对应的主键值,到聚簇索引中查找整行数据,这个过程就是回表

14.数据库事务四大特性?隔离等级

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致的状态。
  • 隔离性(Isolation):数据库提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,他对数据库中的数据的改变就是永久的。

四种隔离级别,以及解决了什么问题

1.读未提交(Read uncommitted):

这种事务隔离级别下,select语句不加锁。

此时,可能读取到不一致的数据,即“读脏 ”。这是并发最高,一致性最差的隔离级别。

2.读已提交(Read committed):

可避免 脏读 的发生。

在互联网大数据量,高并发量的场景下,几乎 不会使用 上述两种隔离级别。

3.可重复读(Repeatable read):

MySql默认隔离级别。

可避免 脏读 、不可重复读 的发生。

4.串行化(Serializable ):

可避免 脏读、不可重复读、幻读 的发生。

15.三大范式和反范式

第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)

第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)

反范式: 反范式设计是一种与传统规范化设计相对的数据库设计方法,它允许在数据库中引入冗余数据以提高查询性能或简化查询操作。反范式设计的主要思想是通过增加冗余数据来消除关系型数据库中的连接操作,从而提高查询性能。

16.如何一次添加50万条数据

如果一次性添加50万条数据会导致mysql压力过大,从而有宕机的风险。可以采用分批添加的方案,比如使用定时任务,一次添加5000条数据。

17.常见的存储引擎

最常见的有InnoDB和MyISAM。

区别:

数据存储结构:

MyISAM的数据存储文件有三个:.frm(表结构定义)、.MYD(数据文件)、.MYI(索引文件)。

InnoDB数据存储文件有两个:.frm(表结构定义)和.ibd(数据和索引文件)。

事务支持:

MyISAM不支持事务,InnoDB支持事务处理。

锁机制:

MyISAM使用表级锁,InnoDB即支持行级锁(默认),也支持表锁。

外键支持:

MyISAM不支持外键约束,InnoDB支持外键约束。

全文索引支持:

MyISAM支持,InnoDB不支持。

18.utf-8和utf-8 mb4区别

UTF-8 是一种变长编码,用于表示 Unicode 字符集中的字符,最多可以表示 1,112,064 个字符。
UTF-8MB4 是对 UTF-8 的扩展,支持更广泛的字符集范围,可以表示 Unicode 字符集中的所有字符,包括辅助平面和 Emoji 表情等。
需要注意的是,UTF-8MB4 编码需要更多的存储空间和处理能力,在大多数情况下,使用 UTF-8 编码是常见且足够的。只有在需要存储或处理特殊字符集时,才需要考虑使用 UTF-8MB4 编码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/756656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运算符重载之日期类的实现

接上一篇文章&#xff0c;废话不多说&#xff0c;直接上代码 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, const Date& d);friend …

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…

Workbench密码登录登录失败

Workbench密码登录登录失败操作系统禁用了密码登录方式&#xff0c;会导致使用了正确的用户名和密码仍无法登录 sudo vim /etc/ssh/sshd_config 输入O进入编辑 改完后重启 systemctl restart sshd.service 登录报错 有试了几遍登上了 可能是改完还要等一会儿

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数&#xff1a; 函数二 函数三 主函数 运行结果 src&#xff1a; model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征&#xff0c;实现高准确度的身份识别。…

账做错了怎么办?看完这篇三分钟学会调错账|柯桥职业技能培训

作为会计遇到错账、漏账在所难免。既然错误在所难免&#xff0c;如果纠正错误就十分重要。今天就跟小编一起学下如何调账。 在处理错账之前&#xff0c;我们首先要把会计科目做一下分类&#xff0c;以便于我们找到错账的类型和原因。会计科目可以分为资产负债类科目&#x…

2.SQL注入-字符型

SQL注入-字符型(get) 输入kobe查询出现id和邮箱 猜测语句,字符在数据库中需要用到单引号或者双引号 select 字段1,字段2 from 表名 where usernamekobe;在数据库中查询对应的kobe&#xff0c;根据上图对应上。 select id,email from member where usernamekobe;编写payload语…

Emp.dll文件丢失?理解Emp.dll重要性与处理常见问题

在繁多的动态链接库&#xff08;DLL&#xff09;文件中&#xff0c;emp.dll 可能不是最广为人知的&#xff0c;但在特定软件或环境中&#xff0c;它扮演着关键角色。本文旨在深入探讨 emp.dll 的功能、重要性以及面对常见问题时的解决策略。 什么是 emp.dll&#xff1f; Emp.d…

【Java Gui精美界面】IDEA安装及配置SwingX

SwingX 是一个基于 Swing 的 Java GUI 库&#xff0c;旨在为 Swing 提供额外的功能和丰富的组件 特点描述基于 Swing继承了 Swing 的所有特性和功能。丰富组件SwingX 提供了一组高级 UI 组件&#xff0c;例如 TreeTable仍在发展中不活跃的发展ing。。。支持搜索高亮如 TreeTab…

【单元测试】Controller、Service、Repository 层的单元测试

Controller、Service、Repository 层的单元测试 1.Controller 层的单元测试1.1 创建一个用于测试的控制器1.2 编写测试 2.Service 层的单元测试2.1 创建一个实体类2.2 创建服务类2.3 编写测试 3.Repository 1.Controller 层的单元测试 下面通过实例演示如何在控制器中使用 Moc…

【漏洞复现】飞企互联——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

JAVA高级进阶13单元测试、反射、注解

第十三天、单元测试、反射、注解 单元测试 介绍 单元测试 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试 咱们之前是如何进行单元测试的&#xff1f; 有啥问题 &#xff1f; 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试。 …

Django 自定义过滤器

1&#xff0c;编写自定义过滤器并注册 创建目录 Test/app5/templatetags 分别创建文件 Test/app5/templatetags/__init__.py Test/app5/templatetags/myfilter.py 添加过滤器脚本 Test/app5/templatetags/myfilter.py from django import template register template.…

shell:处理命令行参数 获取用户输入

1. 命令行参数 1.1 位置参数 bash shell会将一些称为位置参数(positional parameter)的特殊变量分配给输入到命令行中的 所有参数。这也包括shell所执行的脚本名称。位置参数变量是标准的数字:$0是程序名&#xff0c;$1是第 一个参数&#xff0c;$2是第二个参数&#xff0c;依…

基于C语言的Jacobi迭代和Gauss-Seidel迭代的方程组求解实现

文章目录 Jacobi迭代方法介绍Gauss-Seidel迭代方法介绍具体代码实现示例题目实现效果 Jacobi迭代方法介绍 Jacobi迭代法是一种简单的迭代求解方法&#xff0c;适用于严格对角占优矩阵。其基本思想是利用当前迭代步的已知解来更新下一个迭代步的解。在C语言实现中&#xff0c;我…

网格处理库 pmp-library 编译及应用笔记 -- 已全部解决√

多边形网格处理库Polygon Mesh Processing Library&#xff0c;简称pmp-library的 编译及应用笔记 – 已全部解决√ 官网&#xff1a;https://www.pmp-library.org/index.html 代码&#xff1a;https://github.com/pmp-library/pmp-library 平台&#xff1a;Ubuntu1 20.04&…

Python功能制作之使用streamlit做一个简单的WebUI

使用Streamlit创建WebUI 1. 什么是Streamlit Streamlit 是一个开源的Python库&#xff0c;用于快速创建美观的Web应用。 它适合数据科学家和机器学习工程师&#xff0c;因为它能够以最小的代码量将数据应用程序带到浏览器中。通过简单的Python脚本&#xff0c;可以创建交互式…

C++中的三大池:线程池,内存池,数据库连接池

C中有三大池&#xff0c;即我们常说的&#xff1a;线程池&#xff0c;内存池&#xff0c;数据库连接池。 一.线程池 多线程同时访问共享资源造成数据混乱的原因就是因为CPU的上下文切换导致&#xff0c;线程池就是为了解决此问题而生。 多线程常用的有&#xff1a;std::threa…

基于Spring Boot的校园失物招领系统

1 项目介绍 1.1 研究的背景及意义 在网络时代飞速发展的今天&#xff0c;随着网络技术日臻完善&#xff0c;我们的生活方式正经历深刻变革。在物质追求日益增长的同时&#xff0c;提升个人精神境界也成为了现代人的共同向往&#xff0c;而阅读则是滋养心灵、丰富精神世界的重…

【SpringBoot3学习 | 第1篇】SpringBoot3介绍与配置文件

文章目录 前言 一. SpringBoot3介绍1.1 SpringBoot项目创建1. 创建Maven工程2. 添加依赖(springboot父工程依赖 , web启动器依赖)3. 编写启动引导类(springboot项目运行的入口)4. 编写处理器Controller5. 启动项目 1.2 项目理解1. 依赖不需要写版本原因2. 启动器(Starter)3. Sp…

C++——探索智能指针的设计原理

前言: RAII是资源获得即初始化&#xff0c; 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源&#xff0c; 并且在对象的声明周期内控制资源&#xff0c; 最后在对象析构的时候释放资源。注意&#xff0c; 本篇文章参考——C 智能指针 - 全部用法…