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;

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.mzph.cn/bicheng/34471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CRMEB-PHP多商户版安装系统配置清单

系统在安装完成之后,需要对系统进行一系列的配置,才能正常使用全部的功能,以下是官方整理的配置清单 平台后台 商户后台

第十五届蓝桥杯JavaB组省赛题解

第十五届蓝桥杯JavaB组省赛题解 蓝桥杯2024年第十五届省赛真题-分布式队列 - C语言网 (dotcpp.com) 阅读理解&#xff0b;模拟 #include <iostream> #include <vector> using namespace std;int main() { int n; cin >> n; vector<int> list[n]; st…

实例080 进度条百分比显示

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.实例说明 2.技术要点 3.实现过程 4.实例结果 5.示例拓展 2.10 进度条控件典型实例进度条控件&#xff08;Progress&#xff09;用于显示程序的进度&#xff0c…

NetSuite 文件夹 Group Restriction的探究

同一个角色&#xff0c;为什么相同的文件&#xff0c;有的用户可以看&#xff0c;而有的用户不能看呢&#xff1f;这其中与一个隐藏功能相关&#xff0c;即文件夹的Restriction相关&#xff0c;其中一个非常典型的点是Group Restriction&#xff08;组限制&#xff09;&#xf…

【Makefile(一)】

一、概述 什么是makefile&#xff1f;或许很多Windows的程序员都不知道这个东西&#xff0c;因为那些Windows的集成开发环境&#xff08;integrated development environment&#xff0c;IDE&#xff09;都为你做了这个工作&#xff0c;但我觉得要作一个好的和专业的程序员&am…

点云处理中阶 Keypoint

目录 一、什么是关键点 1、2D领域 2、3D领域 1. 点特征 2. 局部描述子 3. 全局描述子 4. 特征检测 二、官方案例案例与资料 三、特征描述与提取模块说明 四、总结 一、什么是关键点 3D点云的特征提取是从三维点云数据中识别和提取描述几何和结构特性的过程。这些特征…

Web渗透:XXE-XML外部实体漏洞

XML External Entity (XXE) 漏洞是一种注入攻击&#xff0c;利用不安全的XML解析器来执行各种恶意操作&#xff0c;如读取本地文件、执行远程代码、发起拒绝服务攻击等&#xff1b;此漏洞的根本原因在于XML标准允许在文档中定义外部实体&#xff0c;并在解析时进行解析和替换。…

Navicat连接服务器MySQL

Navicat连接服务器MySQL 1. Navicat连接服务器MySQL2. 如何查看MySQL用户名和密码3. 修改MySQL登录密码4. 安装MySQL(Centos7)遇到错误和问题1. error 1045 (28000): access denied for user rootlocalhost (using password:yes) 1. Navicat连接服务器MySQL 选择数据库 直接使用…

jar包转exe封装软件并一键安装使用

目录 封装文档说明如有跨域问题在ems服务增加配置服务启动自动打开浏览器使用工具 Launch4j 把jar包打成exe执行文件现在还不能给用户用&#xff0c;因为缺少jre&#xff0c;后面整合资源会把jre一起打包使用inno setup合并资源&#xff0c;mysql之类的服务&#xff0c;最终打包…

数字化转型下的企业人力资源信息系统研究

随着数字化转型的加速&#xff0c;企业人力资源管理面临着全新的挑战和机遇。传统的人力资源信息系统&#xff08;HRIS&#xff09;在新时代的要求下必须进行深刻的革新和升级&#xff0c;以更好地支持企业的发展战略和员工的需求。 数据驱动的决策支持 在当今这个信息化迅猛发…

【系统架构设计师】四、嵌入式基础知识(软件|软件设计|硬件|式总线逻辑)

目录 一、嵌入式软件 1.1 嵌入式软件分类 1.2 板级支持包(BSP) 1.3 BootLoader 1.4 设备驱动程序 二、嵌入式软件设计 2.1 编码 2.2 交叉编译 2.3 交叉调试 三、嵌入式系统硬件的分类 3.1 根据用途分类 3.2 存储器分类 四、内&#xff08;外&#xff09;总线逻辑 …

uni-app系列:uni.navigateTo传值跳转

文章目录 1. 使用URL参数2. 使用页面栈注意事项&#xff1a;uni.navigateTo API 参数详细说明回调函数参数 在uni-app中&#xff0c;如果想要通过uni.navigateTo方法跳转到另一个页面并传递参数&#xff0c;可以使用页面路由的URL参数或者页面栈的方式来传递。但是&#xff0c;…

分享一个解决 EF 性能低的思路,通过 Python 访问心跳侦测 API 保持 EF 在线

前言 .NET FrameWork EF&#xff08;Entity Framework&#xff09;是一个很优秀的 ORM 框架&#xff0c;对于提高工作效率很有帮助&#xff0c;但由于底层原因&#xff0c;在程序启动时&#xff0c;EF 需要初始化和加载模型及其对应的数据库元数据等等&#xff0c;涉及到数据库…

20240507-招商证券 基于鳄鱼线的指数择时及轮动策略

动量震荡指标构造 动量震荡指标为交易者提供了获利的钥匙。动量震荡指标测算了5根价格柱相对于34根价格柱的动量变化。首先计算最近5根价格柱的最高价和最低价间的中点的简单移动平均值&#xff0c;即(最高价最低价)12的简单移动平均&#xff0c;将得出的值减去最近34根价格柱…

urfread学Linux|基本操作

切换界面 如何在VMware切换到命令行界面、切回图形化界面、释放鼠标和键盘 使用ctrlalt可以释放虚拟机对鼠标键盘的控制——就是你可以按这个键切出来到windows 使用ctrlaltF1可以切到图形化界面 使用ctrlaltF2可以切到命令行界面 文件夹相关操作 创建&#xff1a;mkdir文件…

Odoo OWL组件简介

Odoo OWL是Odoo框架中的一个前端开发工具&#xff0c;它被设计用来创建高效、可维护的用户界面组件。OWL利用现代JavaScript的特性&#xff0c;如组件、钩子&#xff08;Hooks&#xff09;和虚拟DOM&#xff0c;来提高开发效率和用户体验。OWL组件是构建Odoo前端的基础&#xf…

Cephalo:专门用于仿生设计的多模态视觉大型语言模型

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

linux库函数 gettimeofday() localtime 使用demo

1. 基本说明 /* linux库函数 gettimeofday 1. 头文件#include <sys/time.h> 2. 函数形式int gettimeofday(struct timeval *tv, struct timezone *tz); 3. 返回值Returns 0 on success, or –1 on error 4. 参数tv&#xff1a;虽然tv_usec字段提供微秒级精度&#xff0…

代码随想录训练营第十七天 654最大二叉树 617合并二叉树 700二叉树搜索树的搜索

第一题&#xff1a; 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先找到这个数组中的最大值的下标。 然后将数组分为左右两个区间。 然后进行递归。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

审美进阶:7个小程序模板,助你提高设计感!

小程序是一种无需下载和安装即可使用的应用程序。小程序实现了应用程序“触手可及”的梦想。用户可以通过扫描或搜索打开应用程序。对于开发者来说&#xff0c;小程序也大大降低了开发成本。因此&#xff0c;越来越多的品牌争相制作小程序应用程序。本文将为您带来优秀的微信小…